请教高手:如何杀子进程(子进程中又创建了子进程、线程等)很有代表性

发布于 2022-07-23 20:59:57 字数 803 浏览 14 评论 9

如题,
int main(int argc,char **argv)
{
   .....
    if( (pid1 = fork()) == 0 )
    {//子进程中
     if ( ( pid2 = fork() ) == 0 )
        {//孙进程中
          //有可能这家伙还创建重孙进程、线程什么的
       ...
         }
        thread1 = 创建一个线程;
      ...
        //可能在子进程中不止一个线程、不止一个进程
   }
    //在父进程中
   。。。
}

我的问题是怎么能在父进程中根据子进程的PID,把子进程以及这个子进程产生的线程、孙进程等一起杀死?

谢谢!

[ 本帖最后由 zhongfangqing 于 2006-7-27 12:17 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

最后的乘客 2022-07-25 11:59:00

原帖由 zhongfangqing 于 2006-7-31 13:10 发表
那个task_struct,用户程序不能调用吗?

不能。

挽手叙旧 2022-07-25 11:58:52

kill 0 pid

长不大的小祸害 2022-07-25 11:58:48

那个task_struct,用户程序不能调用吗?

注定孤独终老 2022-07-25 11:54:10

原帖由 zhongfangqing 于 2006-7-28 12:34 发表
我本来想写一个函数
int killProcessorFamily(pid_t pid)
{
...
}
这样,传给我一个进程的pid,我就可以把它的子孙后代都杀掉
我想过通过struct task_struct这个数据结构来解决,用get_current() 来得到当前 ...

kernel module?

随风而去 2022-07-25 11:46:35

我本来想写一个函数
int killProcessorFamily(pid_t pid)
{
...
}
这样,传给我一个进程的pid,我就可以把它的子孙后代都杀掉
我想过通过struct task_struct这个数据结构来解决,用get_current() 来得到当前父进程的task_struct结构,然后再通过task_struct里面指向子进程以及兄弟进程的指针来递归找到所有的pid,然后杀死他们
但我在红帽9下发现这个问题。
我用这行的时候,编译出现错误
printf("当前进程的pid为: %dn",(get_current())->pid);
晕死了啊。
期待高人出现

怪我入戏太深 2022-07-25 11:12:07

>>
>>
>>如果父进程知道子进程、孙子进程的PID,那就可以调用execl之类的函数运行kill -9 PID将他们kill掉
>>
>>

原帖由 zhongfangqing 于 2006-7-27 09:18 发表
如题,
int main(int argc,char **argv)
{
   .....
    if( (pid1 = fork()) == 0 )
    {//子进程中
     if ( ( pid2 = fork() ) == 0 )
        {//孙进程中
          //阿有可能这家伙还创建重孙进程 ...

你爱我像她 2022-07-25 08:50:33

用 kill系统调用发送一个指定的信号比如SIGUSR1。子进程收到该信号,再向孙进程发送SIGUSR1,然后执行退出动作。需要自己设计。

man 2 kill.

不…忘初心 2022-07-25 04:03:57

大伙是没人会还是懒的说啊?

梦幻之岛 2022-07-24 08:04:44

自己顶一下

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文