【发布时间】:2021-03-23 12:14:52
【问题描述】:
我有一个脚本 workingScript.sh。我还有另一个脚本,称为 monitorscript.sh,我想用它来监控 workingScript.sh 的 processid 活动。
我想确保如果有任何 wc/cat 除了从 17506(workingScript.sh 的父进程)生成的进程 id 之外,它应该被 monitorscript.sh 杀死
ps aux|grep "workingScript*"
svc.test+ 25896 0.0 0.0 112812 984 pts/3 S+ 01:15 0:00 grep --color=auto workingScript*
svc.test+ 17506 0.0 0.0 113288 1072 ? S Mar18 0:00 sh workingScript.sh
svc.test+ 17510 0.0 0.0 113412 868 ? S Mar18 0:03 sh workingScript.sh
workingScript.sh 父进程 id 的进程树如下所示。
pstree -p 17506
sh(17506)─┬─cat(17509)
└─sh(17510)─wc(17569)
因此,在任何时候,如果任何 wc/cat 进程 id 与 workingScript.sh 创建的进程 id 不同(在本例中为 17509/17569,根据上述进程树),它应该被杀死
我们可以使用PPID来获取相同脚本的进程ID,但是我们如何获取不同脚本的进程ID以及不同脚本的相关子进程
有人可以帮我吗?
【问题讨论】:
-
将“不同脚本”的 PPID 回显到脚本内的文件中。然后,您可以从另一个进程引用该文件和 PID。
-
总的来说,
it should be killed by monitorscript.sh这是错误的做法。我并没有真正理解重点——如果cat足够短,那么monitorscript.sh甚至都不会注意到它。how can we get for different script and related child processes for a different script正如你所展示的,ps aux | grep写成pgrep和pstree更好。您在帖子中使用了它们 - 所以在您的脚本中使用它们。 -
@kamilCuk 实际上,为了演示,我提到了 cat ,实际上是我想杀死的 inotifywait 进程。所以我同意你的观点,即为什么有人会试图杀死一个 cat 进程,但实际上它不是那样的
标签: linux bash shell unix process