码迷,mamicode.com
首页 > 系统相关 > 详细

Linux创建子进程的函数说明

时间:2017-05-02 12:05:46      阅读:320      评论:0      收藏:0      [点我收藏+]

标签:使用   默认   for   break   个数   执行   共创   cpu   tpi   

1. fork函数,创建一个子进程

pid_t fork(void); //pid_t就是一个整形类型

返回值: 

成功的情况下,父进程返回子进程的id(非负整数),子进程返回0;

失败的情况,父进程返回-1,创建子进程失败,也就是没有创建子进程。

举例说明:

int main(int argc,char* argv[]) {

pid_t pid;

pid = fork(); //创建一个子进程,从这段代码开始(包括这段代码)往后,就有两个进程在执行了,

//但是,哪个进程先执行不确定,看哪个进程抢占到cpu了。

if (pid == -1 ) {//-1说明是父进程,-1表示创建进程失败

perror("fork fail"); exit(1);

} else if (pid > 0) {//pid大于0说明是父进程,>0 表示创建子进程成功

sleep(1);//这里父进程睡眠1秒是为了让子进程先退出,否则子进程变为孤儿进程(即子进程的父进程变为init进程)

printf("parent_pid = %d, parentID = %d\n", getpid(), getppid());

} else if (pid == 0) {//pid等于0说明是子进程,此时表示执行fork函数成功,不是创建子进程。

printf("child_pid = %d, parentID=%d\n", getpid(), getppid());

}

printf("父子进程都会执行到这句话\n");

return 0;

2. fork循环创建n个子进程

 循环创建子进程的关键:子进程里使用break跳出循环,只让父进程创建子进程,不让子进程里再创建子进程,否则最后就是创建是2^n-1个子进程了,而且这样逻辑有点乱的感觉,不好控制。

举例说明:

int main(int argc, char *argv[]) {

int i, n = 3; //默认创建3个子进程

if (argc == 2) { n = atoi(argv[1]); } //可以通过命令行参数传进来要创建的个数

for (i = 0; i < n; i++){ //父进程循环n遍,执行下面的if里面的条件fork去创建子进程,i等于n时退出循环,总共创建n个子进程。

if (fork() == 0) break; //fork等于0说明是子进程,直接跳出循环

//下面是各个子进程和父进程都会执行到的代码 

sleep(i); //让第i个进程睡眠i秒,这样可以看到各个进程按照顺序退出,便于查看结果

if (n == i) printf("I am parent, pid = %d\n", getpid()); 

else printf("I‘m %dth child, pid = %d\n", i+1, getpid());

return 0;

3. getpid函数

  //todo

4. getppid函数

 

5. getuid函数

 

6. getgid函数

 

7. kill函数

 

8. exit函数 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Linux创建子进程的函数说明

标签:使用   默认   for   break   个数   执行   共创   cpu   tpi   

原文地址:http://www.cnblogs.com/yongfengnice/p/6795102.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!