我正在bash shell中执行一个进程(流服务器),然后再启动一个子进程(媒体播放器)进程。问题是当我关闭孩子时,父母一直在跑步。
我无法访问他们的来源,但我想知道是否有办法将它们包装在祖父母的脚本/流程中,所以当我关闭孩子时父母也会被关闭?
任何指导将不胜感激,提前谢谢。
答案 0 :(得分:0)
通常,您可以使用命令ps -ef
来检查要杀死的进程ID及其父ID,然后您可以使用命令“kill -pid”来终止您要杀死的进程。
答案 1 :(得分:0)
父级可能通过执行文件来启动子级。假设该文件为/blah/blah/child
。您可以做的是重命名/blah/blah/child
,而是使用一个精心设计的带有该名称的shell脚本。 shell脚本可以通过所有参数调用重命名的子代。当子进程退出时,shell脚本可以终止父进程($ PPID)。
这样的事情:
$ mv -i /blah/blah/child /blah/blah/child-renamed
$ cat > /blah/blah/child
#!/bin/sh
/blah/blah/child-renamed "$@"
kill -TERM $PPID
^D
chmod +x /blah/blah/child # Actually, you should match the permissions from /blah/blah/child-renamed
如果父母做了一些奇怪的事情但你可能会幸运的话,这可能实际上不起作用。
我刚才想到的另一个复杂问题:如果子进程根据执行文件的名称改变其行为,那么你将不得不更加努力地使其正常工作。