Linux创建子进程的函数说明

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函数

时间: 2024-10-03 22:40:18

Linux创建子进程的函数说明的相关文章

windows、linux创建子进程

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

linux创建子进程--fork()方法

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

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

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

linux进程编程:子进程创建及执行函数简介

子进程创建及执行函数有三个: (1)fork();(2)exec();(3)system();    下面分别做详细介绍.(1)fork()    函数定义:    pid_t fork();    函数说明:    linux下进程在内存中由三部分数据组成:代码段.数据段.堆栈段.在一个进程中,调用fork函数,可以创建.启动一个新进程.新进程与父进程共享代码段,复制父进程的数据段和堆栈段.创建成功后,fork()会向两个进程都有返回值.向父进程的返回值为子进程的进行号,向子进程的返回值为0.

【归纳总结】Unix/linux下的进程管理(二):创建进程的函数及其应用、对比

创建进程的函数fork().vfork()和execl() 本次内容主要介绍Unix/linux下2个创建进程的函数fork和vfork以及它们的差别. 1.fork函数 (1)函数的格式 #include <unistd.h> pid_t fork(void); 函数功能: 主要用于以复制正在运行进程的方式来创建新的进程,其中新进程叫做子进程,正在运行的进程叫做父进程. 返回值: 函数调用成功时,父进程返回子进程的PID,子进程返回0,函数调用出错时,父进程返回-1,子进程没有被创建. 注意

创建进程的函数

clone().fork().vfork()都是Linux的系统调用. 进程一般由代码段.数据段和PCB进程控制块组成. fork 创造的子进程复制了父亲进程的资源,包括内存的内容task_struct内容,新旧进程使用同一代码段,复制数据段和堆栈段,这里的复制采用了注明的copy_on_write技术,即一旦子进程开始运行,则新旧进程的地址空间已经分开,两者运行独立. 优点是子进程的执行独立于父进程,具有良好的并发性. 缺点是两者的通信需要专门的通信机制,如pipe.fifo和system V

Linux下getsockopt/setsockopt 函数说明

[ getsockopt/setsockopt系统调用 功能描述:  获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和选项的名称必须给出.为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET.为了操作其它层的选项,控制选项的合适协议号必须给出.例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP. 用法:  #include #include int getsockopt(int sock

linux创建进程fork的方法步骤

fork创建进程 函数原型如下 #include// 必须引入头文件,使用fork函数的时候,必须包含这个头文件,否则,系统找不到fork函数 pid_t fork(void); //void代表没有任何形式参数 父进程与子进程 1.掌握概念,什么是父进程,什么是子进程 除了0号进程(系统创建的)之外,linux系统中都是由其他进程创建的.创建新进程的进程,即调用fork函数的进程为父进程,新建的进程为子进程. 2.fork函数不需要任何参数,对于返回值有三种情况 1)对于父进程,fork函数返

linux 创建守护进程的相关知识

linux 创建守护进程的相关知识 http://www.114390.com/article/46410.htm linux 创建守护进程的相关知识,这篇文章主要介绍了linux 创建守护进程的相关知识,需要的朋友可以参考下 关键字:linux.守护进程 创建子进程,父进程退出 这是编写守护进程的第一步.由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象.之后的所有工作都在子进程中完成,而用户在Shell终端里则可以执行其他命令,从而在形式上做到