导航:首页 > 编程系统 > linux父进程等待子进程结束

linux父进程等待子进程结束

发布时间:2023-09-03 20:58:28

linux里面的父进程等待子进程问题..

  1. 父进程只等待任何一个进程状态改变,wait就会立即返回.并携带状态改变的子进程信息专.如果需要等属待所有进程结束,可以wait外面套循环.

  2. 如果子进程结束后父进程才调用wait/waitpid则不会接收到信息.子进程将变成僵尸进程.

⑵ 在 linux中如何结束由一个父进程产生的所有子进程

父进程未结束,子进程先结束,会产生僵尸进程。
子进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用 exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。
即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程。
僵尸进程的避免:
(1) 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。
(2) 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父
进程会收到该信号,可以在handler中调用wait回收。
(3) 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD, SIG_IGN) 通知内
核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送
信号。
(4) 还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进
程后退出,那么孙进程被init接管,孙进程结束后, init会回收。不过子进程的回收 还要自己
做。
建议你使用第三种方法,父进程直接忽略子进程的结束,留给内核作回收处理。这样就不
会产生僵尸进程。

⑶ linux下system函数调用shell命令后,怎样让主进程等子进程返回后,接着执行

这是进程间同步的问题。解决方法是:fork一个子进程执行system调用,父进程调用 wait 或 waitpid 等待子进程的终止信息。

父进程调用 wait 或 waitpid 时可能会:
• 阻塞(如果它的所有子进程都还在运行)。
• 带子进程的终止信息立即返回(如果一个子进程已终止,正等待父进程读取其终止信息)。
• 出错立即返回(如果它没有任何子进程)。

wait 和 waitpid 这两个函数的区别是:
• 如果父进程的所有子进程都还在运行,调用wait将使父进程阻塞,而调用waitpid时如果在options参数中指定WNOHANG可以使父进程不阻塞而立即返回0。
• wait等待第一个终止的子进程,而waitpid可以通过pid参数指定等待哪一个子进程。

⑷ Linux 如何使用`wait`等待所有子进程退出,而不是等待第一个子进程退出.希望能给出代码片段

linux中的wait函数等到一个子进程退出就会返回,恢复到执行状态。要想等所有子进程专退出可以用waitpid函数
pid_t wait(pid_t pid,int * status,int options);
pid>0时,属只等待pid与该参数相同的子进程,如果该子进程一直没有退出,那么父进程会一直阻塞;
pid=0时,会等待同一个进程组的子进程,若子进程加入了其他进程组,waitpid()不再关心它的状态;
pid=-1时,waitpid()与wait()函数相同,将阻塞等待并回收一个子进程;
pid<-1时,会等待指定进程组的任何子进程,进程组的id等于pid的绝对值;

⑸ linux编程wait(0)放在最后一句有什么用

wait是等待,等待前面的所有子进程全部执行完才继续。这里p1=fork(),p2=fork()不是有调用到fork子进程吗
写这个的回目的是避免上面答的还没执行完就开始执行后续的程序了。
我举个例子,你在执行备份后删除原文件操作,备份还没进行完,程序就开始删除了。这样就会出错了。
当然你这里后续没有操作,wait只是在等待上面的全部做完然后退出整个程序。

⑹ linux里面的父进程等待子进程问题..

1.
父进程只等待任何一个进程状态改变,wait就会立即返回.并携带状态改变的子进程信息.如果需要等待所有进程结束,可以wait外面套循环.
2.
如果子进程结束后父进程才调用wait/waitpid则不会接收到信息.子进程将变成僵尸进程.

⑺ Linux中启动进程的方法有哪些哪种更好用

启动进程有手动启动和调度启动两种方法, 其中调度启动常用的命令为at、batch和crontab.,好用不好用我觉得都差不多~ 调度启动吧!希赛资料库里有的噢

⑻ Linux C中父进程退出时,使用什么方法可使子进程退出

发信号,抄kill(子进程ID, SIG信号)
如果不只一个袭子进程,需要把所有的子进程ID存起来,然后用上述方法一个一个的kill
SIG信号需要能使子进程退出,如SIGQUIT,SIGINT...等一些默认的信号;也可以在子进程中捕获某些信号,然后子进程收到后自己退出
注意:最好是在子进程退出时,父进程要等待所有子进程退出

阅读全文

与linux父进程等待子进程结束相关的资料

热点内容
格式工厂iphone铃声 浏览:171
linux设置字符编码 浏览:15
帝王世纪升级哪个兵种 浏览:409
c编程开发软件是什么 浏览:334
二的大写怎么写app 浏览:612
乐视数据删除了怎么找回来 浏览:651
ug编程初始化怎么办 浏览:295
nginxajax配置文件 浏览:467
小程序获取二进制图片 浏览:206
为什么有的数控车编程有百分号 浏览:425
m文件有什么用 浏览:359
宜昌做投标文件多少钱 浏览:166
uc浏览器小说下载那个文件夹 浏览:908
qq和手机 浏览:238
ps备份文件教程 浏览:306
数据库原理嵌套查询 浏览:679
为什么文件只解压了一部分 浏览:728
c语言课程教学视频java源码下载 浏览:444
老毛桃2014u盘启动盘制作教程 浏览:53
盗取qq密码视频教程 浏览:948

友情链接