web-dev-qa-db-ja.com

/ lib / systemd / system-sleep /のスクリプトは削除されましたが、まだ実行されています

一時停止後に実行するスクリプトを作成しました(スクリプトは/ lib/systemd/system-sleep /ディレクトリにありました)が、テストの後、そこから削除することにしましたが、スクリプトはまだ実行中です-スクリプトが通知送信し、ラップトップを起動するたびに通知がポップアップ表示されるようになりました。それはどのように可能ですか、どうすれば完全に削除できますか?

1
mauek unak

あなたが実行する必要があります

Sudo systemctl daemon-reload

スクリプトを削除した後。

これを自分でテストした結果、デーモンのリロードだけでは不十分であることがわかりました。 systemctl daemon-reexecは役に立ちません。したがって、実行中のスクリプトを削除する唯一の方法は、再起動するか、プロセスを手動で強制終了することです。

これが可能な理由の説明:Linuxでは、実行中のスクリプトを削除できるのは正常です。実際に起こるのは、ディレクトリエントリが削除されることです(ファイルは「不可視」になります)が、すべてのプロセスがこのファイルの開いているファイルハンドルを閉じた後にのみ実際に消えます。

この動作を次のようにテストできます。

$ 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

スクリプトがなくなっていることがわかりますが、プロセスを強制終了するまで実行されます。

2
Sebastian Stark