我编写了一个在挂起后运行的脚本(脚本位于 /lib/systemd/system-sleep/ 目录中),但经过测试后我决定从那里删除它,但脚本仍在运行 - 我知道这一点是因为脚本中有通知发送,现在每次我唤醒笔记本电脑时都会看到通知弹出。这怎么可能?我该如何彻底删除它?
答案1
你应该跑
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
您将看到脚本已经消失,但仍在运行,直到您终止其进程。