linuxc关于进程等待的代码-创新互联
下面资料是关于linux c 关于进程等待的内容,希望能对码农有较大好处。
创新互联建站主要从事成都网站制作、成都网站建设、外贸营销网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务炎陵,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792#include
#include
#include
void check_exit(int status);
main()
{
pid_t pid;
int status;
if((pid = fork()) < 0)
{
printf("fork error!!n");
exit(0);
}
else if(pid == 0)
{
printf("child process exitn");
exit(0);
}
else
{
if(wait(&status) != pid)
{
printf("wait error!!");
exit(0);
}
check_exit(status);
}
}
void check_exit(int status)
{
if(WIFEXITED(status))
printf("eixtn");
else if(WIFSIGNALED(status))
printf("killed by signaln");
else if(WIFSTOPPED(status))
printf("stopped by signaln");
else if(WIFCONTINUED(status))
printf("continued");
}
等待进程改变其状态。所有下面哪些调用都被用于等待子进程状态的改变,获取状态已改变的子进程信息。状态改变可被认为是:1.子进程已终止。2.信号导致子进程停止执行。3.信号恢复子进程的执行。在子进程终止的情况下,wait调用将允许系统释放与子进程关联的资源。如果不执行wait,终止了的子进程会停留在"zombie"状态。如果发现子进程改变了状态,这些调用会立即返回。反之,调用会被阻塞直到子进程状态改变,或者由信号处理句柄所中断(假如系统调用没有通过sigaction的SA_RESTART标志重启动)。wait系统调用挂起当前执行中的进程,直到它的一个子进程终止。waitpid挂起当前进程的执行,直到指定的子进程状态发生变化。默认,waitpid只等待终止状态的子进程,但这种行为可通过选项来改变。waitid系统调用对于等待哪个子进程状态改变提供了更精确的控制。子进程已终止,父进程尚未对其执行wait操作,子进程会转入“僵死”状态。内核为“僵死”状态的进程保留最少的信息量(进程标识,终止状态,资源使用信息),过后父进程执行wait时可以获取子进程信息。只要僵死的进程不通过wait从系统中移去,它将会占据内核进程表中的一个栏位。如果进程表被填满,内核将不能再产生新进程。如果父进程已终止,它的僵死子进程将由init进程收养,并自动执行wait将它们移去。wait(等待子进程中断或结束)
#include
#include
函数说明wait()会暂时停止目前进程的执行(挂起父进程),直到有信号来到或子进程结束。如果在调用wait()时子进程已经结束,则wait()会立即返回子进程结束状态值。子进程的结束状态值会由参数status返回,而子进程的进程识别码也会一快返回。如果不在意结束状态值,则参数status可以设成NULL。如果调用wait的进程没有子进程则会调用失败,子进程的结束状态值请参考waitpid()如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1。失败原因存于errno中。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页名称:linuxc关于进程等待的代码-创新互联
本文来源:http://azwzsj.com/article/pocge.html