需要根据 fork() 的返回值来判断下面的代码是在父进程(返回pid>0)中还是子进程(返回0)中. 像上面的代码中 if 中的代码被在子进程中执行, else 中的代码在父进程中执行。
2、例程:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
pid_t id //定义一个进程号变量
int i=0
printf("start fork/n")
id = fork() //调用fork函数新建一个进程
i ++
printf("end fork/n")
//判断当前进程
if(id <0){//出错
perror("fork failed/n")
exit(1)
}
else if(id == 0){//子进程
printf("In child/n")
printf("i = %d/n", i++)
exit(0)
}
else{//父进程
printf("In father/n")
printf("i = %d/n", i++)
exit(0)
}
return 0
}
}
else if(WIFEXITED(status))
{
printf(")
while(((child=wait(&status))==-1)&(errno==EINTR))
exit(1).h>Fork Error,strerror(errno))*请解释一下*/
if((child=fork())==-1)
{
printf("
#include<I am the child
int main(int argcn"n".h>:%d\,strerror(errno)).h>
printf(",getpid())1000000!status)
{
printf("n".h>
int status.h>sys/errno
exit(i)n"wait,WEXITSTATUS(status)),child)
#include<*请解释一下*/
if(child==-1)
{
printf("Child %d terminated normally return status is %d\
}
else if(i<:%s\n"
i=5.h>,childn"Child %d terminated due to signal %d znot caught\
printf("sys/I exit with%d\mathstdio
#include<
printf("n"
#include<
}
else if(child==0)
{
int i=0
}
/
}
else if(WIFSIGNALED(status))
{
printf("types:%s"unistd,i),char **argv)
{
pid_t child
/Child %d terminated normally return status is zero\Wait ErrorThis will demostrate how to get the child status\
for(i=0i++)
#include<,WTERMSIG(status))
}
return 0能不能帮忙解释一下这段代码中的一部分
#include<,child
1、启动后台子任务,在执行命令后加& *** 作符,表示将命令放在子shell中异步执行。可以达到多线程效果。如下,sleep10#等待10秒,再继续下一 *** 作sleep10当前shell不等待,后台子shell等待。2、wait命令wait是用来阻塞当前进程的执行,直至指定的子进程执行结束后,才继续执行。使用wait可以在bash脚本“多进程”执行模式下,起到一些特殊控制的作用。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)