如何以编程方式终止从应用程序内启动的进程?澄清一下,有一个应用程序时不时地启动一个 WebKit 子进程,我想在它开始后不久杀死这个子进程(即不是立即,而是在 3 秒左右)。
我目前所做的是 grep WebKit 的输出ps aux
,然后使用 PID 杀死或杀死所有进程二进制文件,但这似乎是我应该能够自动化的事情。例如,如果我知道子进程每 5 分钟启动一次,那么可以使用哪些工具来保持后台运行,以检查该子进程的新实例并以编程方式终止它? (顺便说一句,pkill
我pgrep
无法使用。)
答案1
诀窍是确保您正在终止正确的进程,并且只终止您想要的进程。这听起来很简单,但很多人都把它搞砸了。以编程方式最糟糕的方法是按名称执行此操作。
好的,所以你说你不能修改父级。如果可以的话,正确的方法是获取 fork() 调用的返回值,因为它具有子 PID。 PID 是唯一的,而名称(我认为这就是您使用 ps aux | grep 所做的)不是唯一的。
假设您知道父进程的 PID,pgrep -P 可能是实现此目的的一种方法。这假设您有一个子进程,因为它将匹配父进程的所有子进程。
奇怪的是,killall 匹配年龄,pgrep/pkill 匹配父母,但它们不做对方所做的事情;也许有一天可以解决一些问题。