linux C语言进程

linux C语言进程,第1张

1、fork 是用来创建子进程的, 而不是线程( 线程创建需要用到 pthread_create )。

需要根据 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脚本“多进程”执行模式下,起到一些特殊控制的作用。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8212048.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存