例如,假设您有一个类似于以下内容的 shell 脚本:
longrunningthing &
p=$!
echo Killing longrunningthing on PID $p in 24 hours
sleep 86400
echo Time up!
kill $p
Run Code Online (Sandbox Code Playgroud)
应该做的伎俩,不是吗?除了进程可能提前终止并且它的PID可能已经被回收,这意味着一些无辜的工作在其信号队列中得到了一个炸弹。在实践中这可能确实很重要,但它仍然让我担心。破解 longrunningthing 使其自身死亡,或者在 FS 上保留/删除其 PID 都可以,但我正在考虑这里的一般情况。
我有一堆以start.sh脚本开头的命令,存储它们的 PID。然后,我想stop.sh在用户方便的时候通过运行来阻止它们。
注意陷阱:
start.sh在文件中。150001500115002stop.sh现在运行脚本。15000它尝试终止具有 PID 、15001、的任务15002,不考虑文件而读取它们。start.sh脚本启动的任务,并且我会将我的系统置于未知状态。当我在 Linux 脚本中首先捕获进程的 PID 时$$,如何收集其他信息以确保我不会与将来可能出现的具有相同 PID 的另一个任务混淆?
例如,收集 PPID,或开始日期/时间,或确保某种“通用唯一性”的东西,如果我可以写这个..?
如何收集进程信息以及如何在不混乱的情况下杀死它?