c语言代码父进程杀死子进程,c - C杀死父进程后杀死子进程 - 堆栈内存溢出

我正在尝试编写我的shell克隆。 现在,我正在将SIGINT发送到前台进程,这是我的工作方式:

void performPipeCmd(char *cmd[maxCmdSize][maxArgSize], int waitOption, int numOfCmds){

waitpid(-1, NULL, WNOHANG);

int fd[2];

int status,

fdIn = 0;

pid_t childpid;

if(pipe(fd) == -1) {

perror("Pipe failed");

exit(1);

}

for(int i = 0; i < numOfCmds; i++){

status;

switch ((childpid = fork())){

case -1:

perror("fork");

break;

case 0:

dup2(fdIn, 0);

if (i+1

dup2(fd[1], 1);

close(fd[0]);

execvp(cmd[i][0], cmd[i]);

printf("execvp failure\n");

exit(EXIT_FAILURE);

break;

default:

currentPid = childpid; //setting current childpid

setpgid(childpid, childpid);

waitpid(childpid, &status, waitOption);

close(fd[1]);

fdIn = fd[0];

break;

}

}

}

这是我的信号处理程序:

void sigIntHandler(int dummy){

killpg(currentPid,SIGINT);

}

现在我有两个问题:

即使此程序仅杀死前台进程,我也不知道为什么它不影响后台进程,即使将currentPid设置为后台进程的pid。

离开外壳后如何杀死外壳的子进程? 杀死主进程后,子进程仍然存在:

Shell正在运行:

10061 13511 13511 13511 ? -1 Ssl 1000 0:03 \_ /usr/lib/gnome-terminal/gnome-terminal-server

13511 13520 13520 13520 pts/0 14242 Ss 1000 0:00 \_ bash

13520 14242 14242 13520 pts/0 14242 S+ 1000 0:00 | \_ ./a.out

14242 14243 14243 13520 pts/0 14242 S 1000 0:00 | \_ sleep 100000

离开外壳后:

10061 13511 13511 13511 ? -1 Ssl 1000 0:04 \_ /usr/lib/gnome-terminal/gnome-terminal-server

13511 13520 13520 13520 pts/0 13520 Ss+ 1000 0:00 | \_ bash

13511 13966 13966 13966 pts/1 14256 Ss 1000 0:00 | \_ bash

13966 14256 14256 13966 pts/1 14256 R+ 1000 0:00 | \_ ps ajfx

10061 14243 14243 13520 pts/0 13520 S 1000 0:00 \_ sleep 100000

我试图这样做,但它不起作用:

if(checkIfShouldStop(input, result)) {

killpg(getgid(),SIGINT);

break;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值