请教高手:如何杀子进程(子进程中又创建了子进程、线程等)很有代表性
如题,
int main(int argc,char **argv)
{
.....
if( (pid1 = fork()) == 0 )
{//子进程中
if ( ( pid2 = fork() ) == 0 )
{//孙进程中
//有可能这家伙还创建重孙进程、线程什么的
...
}
thread1 = 创建一个线程;
...
//可能在子进程中不止一个线程、不止一个进程
}
//在父进程中
。。。
}
我的问题是怎么能在父进程中根据子进程的PID,把子进程以及这个子进程产生的线程、孙进程等一起杀死?
谢谢!
[ 本帖最后由 zhongfangqing 于 2006-7-27 12:17 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
更多
发布评论
评论(9)
不能。
kill 0 pid
那个task_struct,用户程序不能调用吗?
kernel module?
我本来想写一个函数
int killProcessorFamily(pid_t pid)
{
...
}
这样,传给我一个进程的pid,我就可以把它的子孙后代都杀掉
我想过通过struct task_struct这个数据结构来解决,用get_current() 来得到当前父进程的task_struct结构,然后再通过task_struct里面指向子进程以及兄弟进程的指针来递归找到所有的pid,然后杀死他们
但我在红帽9下发现这个问题。
我用这行的时候,编译出现错误
printf("当前进程的pid为: %dn",(get_current())->pid);
晕死了啊。
期待高人出现
>>
>>
>>如果父进程知道子进程、孙子进程的PID,那就可以调用execl之类的函数运行kill -9 PID将他们kill掉
>>
>>
用 kill系统调用发送一个指定的信号比如SIGUSR1。子进程收到该信号,再向孙进程发送SIGUSR1,然后执行退出动作。需要自己设计。
man 2 kill.
大伙是没人会还是懒的说啊?
自己顶一下