linux 杀进程函数,如何杀死进程所有的子孙进程(Linux C)

本文介绍了一种在Linux环境下批量终止进程及其所有后代的方法。利用kill函数传递负PID的方式,可以将终止信号发送给拥有相同进程组的所有进程,实现父进程、子进程乃至孙子进程的统一管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

杀死进程的子进程利用kill(ChildPid, SIGTERM)就可以做到,但是如何杀死子进程的儿子喃,这里要用到一个进程组的概念,kill函数可以利用传递负pid的方法将SIGTERM信号传送给具有相同进程组号的所有进程。

如下是man对kill函数的一个的一个描述

#include

#include

/*

pid>0:signal sig is sent to pid

pid==0:sig is sent to every process in the process group of the current process

pid==-1: sig is sent to every process for which the calling process has permission to send signals, except for process 1 (init)

pid

*/

int kill(pid_t pid, int sig);

测试程序:在Redhat下运行,通过ps的方式来观察子孙进程的创建和销毁

#include

#include

#include

#include

#include

#include

#include

int main(void)

{

pid_t pid;

int stat;

for (;;)

{

pid = fork();

if (pid == 0)

{

/* 将子进程的进程组ID设置为子进程的PID */

setpgrp();

printf("Child process running:pid=%d,pgid=%d\n", getpid(),getpgrp());

printf("Creat grandchild process sleep 20 seconds\n");

/* 子进程创建一个孙子进程 */

system("sleep 20");

exit(0);

}

else if (pid > 0)

{

printf("Parent process pid=%d, pgid=%d\n", getpid(),getpgrp());

printf("Parent process sleep 10 seconds\n");

sleep(10);

/* 利用传递负子进程PID将SIGTERM信号传送给子进程和孙子进程 */

kill(-pid, SIGTERM);

wait(&stat);

printf("All child and grandchild processes with pgid=%d were killed\n", pid);

}

else

printf("Fork fail : %s\n", strerror(errno));

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值