Chinaunix
标题:
如何虚拟ctrl+c的操作
[打印本页]
作者:
chunhuap
时间:
2011-06-29 15:21
标题:
如何虚拟ctrl+c的操作
各位大侠:
求教一个问题,
有一个clearmake的并行编译的问题
如果我在当前的shell下,运行一个并行编译的进程,没有扔到后台运行,那么我按ctrl+c可以把所有并行编译的子进程等全部kill掉。
但是,如果我把并行编译的进程扔到后台运行,那么它衍射出来很多子进程,就必须要手工一个一个去找出来,再一一kill掉
请问,有没有什么办法,能对后台运行的进程及子进程一次性的找出来并kill掉,就像按了ctrl+c的操作一样。
谢谢大虾们指点一二。
作者:
q1208c
时间:
2011-06-29 17:12
直接kill -15 <pid> , 主进程的 <pid>
试试
作者:
jerryjzm
时间:
2011-06-29 17:30
并行编译的进程的?
具体是什么 ?
一般情况下,父进程派生出(fork)处理的子进程,会在父进程消亡,一并消亡,除非使用了nohup的命令。
作者:
chunhuap
时间:
2011-06-29 21:03
首先感谢大家的回复。
问题是这样的,我们把编译和测试集成在一个工具里,然后为了提高效率,对编译和测试进行了并行的处理。
导致的一个结果是,工具命令,派生出若干个clearmake的子进程,然后clearmake 因为加了 -j的并行编译选项,又会派生出许多make的子进程,然后根据父进程的PID,查到clearmake的父进程是 1
于是乎,我们就无法掌控到它实际的父进程的PID号了,也无法把所有子进程都kill掉。
但是,在shell下,如果不放在后台运行的话,只要ctrl+c 就可以把所有子进程都kill光。。。
所以,个人以为,理论上是可以实现的,但是就是没摸到门路。。。
作者:
jerryjzm
时间:
2011-06-30 11:48
回复
4#
chunhuap
既然这样,你可以在你编译啥的完成后,使用
ps -ef|grep "派生进程的名字“|grep -v grep|awk '{print $2}'|xarg -i kill -9 {};
这里的 派生进程的名字 有规律吧?
作者:
chunhuap
时间:
2011-06-30 13:43
感谢Jerry的关注,
首先,我们的编译耗时比较久,在一般的工作站上编译大概需要1个多小时,所以,我们找了几台性能比较强劲的server来跑,这样的话,一台server 跑一个编译,有点浪费,所以,我们就用hudson集成,在一台server上跑多个编译,每个编译都是并行的编译,那现在遇到的问题是:
如果,用户突然发现他要编译的代码可能有问题,想要取消,那么,按照我们正常的处理过程就是把相关的进程都kill掉(虽然很麻烦,但是还是可以实现),但是,在gmake并行编译的时候,我们也只能是通过关键字来查找(比如,grep make ,或者 grep <application name> ).但是这样的话,可能其他任务的make 也会一起被kill掉。。
作者:
tim3130
时间:
2011-07-01 07:50
二楼的 不错哦
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2