web-dev-qa-db-fra.com

script dans / lib / systemd / system-sleep / supprimé mais toujours exécuté

J'ai écrit un script à exécuter après la suspension (le script se trouvait dans le répertoire/lib/systemd/system-sleep /), mais après un test, j'ai décidé de le supprimer, mais le script est toujours en cours d'exécution. Je le sais car le script avait notify-send in it, et maintenant chaque fois que je réveille mon ordinateur portable, des notifications apparaissent. Comment est-ce possible et comment puis-je l'enlever complètement?

1
mauek unak

Tu devrais courir

Sudo systemctl daemon-reload

après avoir retiré le script.

Après avoir testé cela moi-même, il s'avère qu'un démon-reload n'est pas suffisant. Même systemctl daemon-reexec n'aide pas. Le seul moyen de se débarrasser du script en cours semble donc être un redémarrage ou une destruction manuelle du processus.

Explication des raisons pour lesquelles cela est possible: Sous Linux, il est normal de pouvoir supprimer un script en cours d’exécution. Ce qui se passe réellement, c’est que l’entrée du répertoire est supprimée (le fichier devient "invisible"), mais elle ne disparaît vraiment que lorsque tous les processus ont fermé les descripteurs de fichier ouverts pour ce fichier.

Vous pouvez tester ce comportement comme ceci:

$ printf "#!/bin/sh\nsleep 10000" >/tmp/bla
$ chmod +x /tmp/bla
$ /tmp/bla &; rm /tmp/bla
[1] 5959
$ ls -l /tmp/bla
ls: cannot access '/tmp/bla': No such file or directory

Vous verrez que le script est parti, mais qu'il est toujours en cours d'exécution jusqu'à ce que vous interrompiez son processus.

2
Sebastian Stark