linux-Linux子进程退出问题wait和waitpid的问题

问题描述

Linux子进程退出问题wait和waitpid的问题

当子进程退出,向父进程发生SIGCHLD时,在父进程的信号处理函数中
wait(NULL), 和 wait(-1,NULL,WHOHANG)的区别

阻塞方式 和 不阻塞到底对子进程的回收有什么影响??

解决方案

http://blog.chinaunix.net/uid-25365622-id-3045460.html

同步,异步主要看你的父进程处理逻辑,想等等待子进程,还是不需要等继续自己的逻辑处理。

解决方案二:

首先问题是:wait(NULL)和waitpid(-1,NULL,WNOHANG)的区别。
一个是阻塞的一个是非阻塞的。阻塞的是当没有已终止的子进程,不过有一个或多个子进程仍在运行时,wait将阻塞到现有子进程第一个终止为止;而waitpid
里的WNOHANG选项告知内核在没有一终止的子进程时不要阻塞,在有尚未终止的子进程时也不要阻塞。
这样的好处是,当有多个子进程同时终止时,wait只能处理一个或几个终止进程,因为它阻塞在某个终止进程时,调用信号处理函数,而此时更多的SIGCHLD
信号到来,它处理不了,就会变成僵尸进程。而waitpid是非阻塞模式,能保证处理完所有终止的子进程。
所以,它俩最大的区别就是能不能全部的处理掉所有的终止子进程。

解决方案三:

对回收没什么影响吧,主要是影响主进程的处理逻辑,即主进程是否关心子进程完全回收完毕

时间: 2024-11-02 13:10:23

linux-Linux子进程退出问题wait和waitpid的问题的相关文章

linux. 线程 异常-linux线程异常退出问题。

问题描述 linux线程异常退出问题. linux进程(多条线程),其中有一个线程死循环没有执行任何操作(长期占用CPU 99%),linux系统有没有可能会干掉这条异常线程,但是整个进程没有退出? 求大神解答,没分- 解决方案 线程问题:空指针异常linux线程异常保护Linux进程.线程问题 解决方案二: 系统会直接杀进程.而不是线程 解决方案三: 对系统来说进程是软件运行的最小单位.所以会直接kill你这个进程.除非进程知道自己命不久矣,将会导致自己gg的线程给处理掉.

windows、linux创建子进程

在windows下创建子进程较常用到的API就是CreateProcess,可以通过以下的方式启动一个新进程:       STARTUPINFO si = {0};                 PROCESS_INFORMATION pi = {0};     si.cb = sizeof(STARTUPINFO);         //结构体大小    GetStartupInfo(&si);                       //初始化结构    si.wShowWindow

Linux 登录和退出系统命令

用户登录系统时 ,为了使系统能够识别自己必须输入用户名和密码经系统验证无误后方能进入系统. 说明: 在系统安装过程中可以创建两种帐号: 超级用户帐号和普通用户帐号,Linux使用者一般为普通用户,而系统管理员一般使用超级用户帐号完成一些系统管理的工作.如果只需要完成一些由普通用户帐号就能完成的任务,建议不要使用超级用户帐号以免无意中破坏系统. 用户登录分两步进行 ,第一步输入用户的登录名,系统根据该登录名来识别用户:第二步输入用户的口令该口令是用户自己选择的一个字符串,对其他用户是保密的,是在登

linux vi保存退出命令(如何退出vi)

有很多方法: 退出Vi 当编辑完文件,准备退出Vi返回到shell时,可以使用以下几种方法之一. 在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell. 在末行模式下,输入命令 :w Vi保存当前编辑文件,但并不退出,而是继续等待用户输入命令.在使用w命令时,可以再给编辑文件起一个新的文件名. [例6] :w newfile 此时Vi将把当前文件的内容保存到指定的newfile中,而

【操作系统】linux创建子进程--fork()方法

(1)fork()的定义 fork()函数是Unix中派生新进程的唯一方法,声明如下:   [cpp] view plaincopy   #include <unistd.h>      pid_t fork(void);   我们需要理解的是,调用一次fork()方法,该方法会返回两次.一次是在调用进程(也就是派生出的子进程的父进程)中返回一次,返回值是新派生的进程的进程ID.一次是在子进程中返回,返回值是0,代表当前进程为子进程.如果返回值为-1的话,则代表在派生新进程的过程中出错.  

[linux]linux过滤日志奇偶数行

sed -n -e 'n' -e 'p' -i tmp.txt 偶数 实践过  去掉文件里的重复行: sort file |uniq  下面就把这些方法总结下来. along@along-laptop:~/code/shell$ cat file 1 2 3 4 5 6 7  awk实现:  一: 1,awk 'NR%2==1' file 2,awk 'NR%2==0' file  二:(这是直接将偶数行和奇数行分别打印到了file2和file1中,这种方法有缺陷就是在file2中始终会打印  

[Linux]Linux printf 输出重定向【转】

转自:http://www.cnblogs.com/aaronLinux/p/6765145.html?utm_source=itdadao&utm_medium=referral 方法一 #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/stat.h> #include <fcntl.h> int main() { fflush(stdout

sql server-虚拟银行转账记录功能无法实现,望各位大神指点指点

问题描述 虚拟银行转账记录功能无法实现,望各位大神指点指点 错误如下: 131110002 131110002 wjj com.microsoft.sqlserver.jdbc.SQLServerException: 列名或所提供值的数目与表定义不匹配. 代码如下: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

Linux 等待进程结束 wait() 和 waitpid()详解

若子进程先于父进程结束时,父进程调用wait()函数和不调用wait()函数会产生两种不同的结果: --> 如果父进程没有调用wait()和waitpid()函数,子进程就会进入僵死状态. --> 如果父进程调用了wait()和waitpid()函数,就不会使子进程变为僵尸进程. 这是为什么呢?现在我们来深入学习wait()函数和waitpid()函数.  wait() 和 waitpid() 学习 1.首先我们先看一下它们的函数原型: 在终端输入命令:man 2 wait 就会看到它的函数原