相关疑难解决方法(0)

如何终止进程并确保 PID 未被重用

例如,假设您有一个类似于以下内容的 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 都可以,但我正在考虑这里的一般情况。

process kill

42
推荐指数
5
解决办法
1万
查看次数

我需要什么信息来确保杀死相同的进程,而不是很久以后用相同的 PID 生成的进程?

我有一堆以start.sh脚本开头的命令,存储它们的 PID。然后,我想stop.sh在用户方便的时候通过运行来阻止它们。

注意陷阱:

  1. 我今天运行,它将 PID 、 、存储start.sh在文件中。150001500115002
  2. 我忘记停止我的进程。一周后,我重新启动了计算机。
  3. stop.sh现在运行脚本。15000它尝试终止具有 PID 、15001、的任务15002,不考虑文件而读取它们。
    => 这些任务,如果某些任务碰巧在我重新启动的新系统上具有这些 PID,则不再是我通过start.sh脚本启动的任务,并且我会将我的系统置于未知状态。

当我在 Linux 脚本中首先捕获进程的 PID 时$$,如何收集其他信息以确保我不会与将来可能出现的具有相同 PID 的另一个任务混淆?

例如,收集 PPID,或开始日期/时间,或确保某种“通用唯一性”的东西,如果我可以写这个..?

如何收集进程信息以及如何在不混乱的情况下杀死它?

process kill

22
推荐指数
6
解决办法
3429
查看次数

标签 统计

kill ×2

process ×2