在 linux中如何结束由一个父进程产生的全部子进程

已举报 回答
在 linux中如何结束由一个父进程产生的全部子进程
问在线客服
扫码问在线客服
  • 回答数

    4

  • 浏览数

    9,887

4个回答 默认排序
  • 默认排序
  • 按时间排序

已采纳
采用ps + grep + awk + pkill命令组合,可实现“结束由一个父进程产生的所有子进程”,如:
父进程名为 parent_proc,可先根据进程名称,得到进程PID
ps -ef |grep parent_proc|egrep -v grep | awk '{print $2}'根据父进程PID终止所有子进程PID,保留父进程
pkill -9 -P $p_pid完整脚本:
for p_pid in `ps -ef |grep parent_proc|egrep -v grep | awk '{print $2}'`do pkill -9 -P $p_piddone有关各命令的详情介绍请查阅相关参考资料。
取消 评论
#includesys/types.h
#includeunistd.h
#includestdio.h
#includestdlib.h
#includetime.h
int main(int argc,char **argv)
{
pid_t pid;
int i = 0;
int j = 0;
//get time
time_t current;
time(¤t);
//make a child process
pid = fork();
for(i = 0; i 5; i++)
{
if(pid 0)
{
perror(fork failed!);
exit(1);
}
if(pid == 0)
{
printf(Current time:\n);
sleep(3);
printf(\n);
}
else
{
for(j = 0; j 3; j++)
{
printf(%s,ctime(¤t));
sleep(1);
}
}
}
if(pid == 0) wait();
return 0;
}
取消 评论
首先来说 不是共享 共享是同一个区域 但是fork后相当于复制了一份 也就相当于一个副本 所以 在以后的程序执行 父进程改变父进程的数据 子进程改变子进程的数据 所以不能说共享 他们相同的是整个程序 差不多就相当于是两个相同的程序在执行

共享数据是线程 创建一个线程后他们的数据是共享的 他们是同一个数据
取消 评论
#includestdio.h
#includestdlib.h //exit包含在stdlib.h头文件中
#includeunistd.h
int main(void)
{
pid_t pid1,pid2;
pid1=fork();
switch(pid1)
{
case 0: //进程创建成功,返回值为0
printf(b); //子进程1创建成功,输出b
break;
case -1:
printf(Process creation failed\n);//子进程创建失败,输出错误信息
break;
default:
printf(a);//此时执行父进程,输出a
sleep(1);
exit(0);
break;
}
pid2=fork();
switch(pid2)
{
case 0: //进程创建成功,返回值为0
printf(c); //子进程2创建成功,输出c
break;
case -1:
printf(Process creation failed\n);//子进程创建失败,输出错误信息
exit(0);
break;
default:
printf(a);//此时执行父进程,输出a
//sleep(1);
exit(0);
break;
}
exit(0);
}
取消 评论
ZOL问答 > 在 linux中如何结束由一个父进程产生的全部子进程

举报

感谢您为社区的和谐贡献力量请选择举报类型

举报成功

经过核实后将会做出处理
感谢您为社区和谐做出贡献

扫码参与新品0元试用
晒单、顶楼豪礼等你拿

扫一扫,关注我们
提示

确定要取消此次报名,退出该活动?