【操作系统】linux创建子进程--fork()方法
2012-05-25 11:37
302 查看
(1)fork()的定义
fork()函数是Unix中派生新进程的唯一方法,声明如下:
我们需要理解的是,调用一次fork()方法,该方法会返回两次。一次是在调用进程(也就是派生出的子进程的父进程)中返回一次,返回值是新派生的进程的进程ID。一次是在子进程中返回,返回值是0,代表当前进程为子进程。如果返回值为-1的话,则代表在派生新进程的过程中出错。
那么在程序中,我们就可以根据此返回值来判断当前进程是父进程还是子进程,来实现一些具体的操作。例如:
父进程中在调用fork()派生新进程,实际上相当于创建了进程的一个拷贝;即在fork()之前的进程拥有的资源会被复制到新的进程中去。网络服务器在处理并发请求时,也可以采取这种派生新进程的方式: 父进程调用accept()后调用fork()来处理每一个连接。那么,所接受的已连接的套接口随后就在父子进程中共享。通常来说,子进程会在这连接套接口中读和写操作,父进程则关闭这个已连的套接口(可以参考:/article/1646267.html)
(3)fork()的用法
fork()有两个典型用法:(1)一个进程进行自身的复制,这样每个副本可以独立的完成具体的操作,在多核处理器中可以并行处理数据。这也是网络服务器的其中一个典型用途,多进程处理多连接请求。 (2)一个进程想执行另一个程序。比如一个软件包含了两个程序,主程序想调起另一个程序的话,它就可以先调用fork来创建一个自身的拷贝,然后通过exec函数来替换成将要运行的新程序。
fork()函数是Unix中派生新进程的唯一方法,声明如下:
#include <unistd.h> pid_t fork(void);
我们需要理解的是,调用一次fork()方法,该方法会返回两次。一次是在调用进程(也就是派生出的子进程的父进程)中返回一次,返回值是新派生的进程的进程ID。一次是在子进程中返回,返回值是0,代表当前进程为子进程。如果返回值为-1的话,则代表在派生新进程的过程中出错。
那么在程序中,我们就可以根据此返回值来判断当前进程是父进程还是子进程,来实现一些具体的操作。例如:
int main() { pid_t pid; if((pid = fork()) = 0) { // TODO: 在子进程中实现具体操作 // ... exit(0); // 结束子进程 } // TODO: 在调用进程(父进程)实现具体操作 }(2)fork()的实质过程
父进程中在调用fork()派生新进程,实际上相当于创建了进程的一个拷贝;即在fork()之前的进程拥有的资源会被复制到新的进程中去。网络服务器在处理并发请求时,也可以采取这种派生新进程的方式: 父进程调用accept()后调用fork()来处理每一个连接。那么,所接受的已连接的套接口随后就在父子进程中共享。通常来说,子进程会在这连接套接口中读和写操作,父进程则关闭这个已连的套接口(可以参考:/article/1646267.html)
(3)fork()的用法
fork()有两个典型用法:(1)一个进程进行自身的复制,这样每个副本可以独立的完成具体的操作,在多核处理器中可以并行处理数据。这也是网络服务器的其中一个典型用途,多进程处理多连接请求。 (2)一个进程想执行另一个程序。比如一个软件包含了两个程序,主程序想调起另一个程序的话,它就可以先调用fork来创建一个自身的拷贝,然后通过exec函数来替换成将要运行的新程序。
相关文章推荐
- 【操作系统】linux创建子进程--fork()方法
- 【操作系统】linux创建子进程--fork()方法
- 【操作系统】linux创建子进程--fork()方法
- linux创建子进程--fork()方法
- linux中fork同时创建多个子进程的方法(二)
- Linux中fork同时创建多个子进程的方法(二)
- linux创建进程fork的方法步骤
- linux中fork同时创建多个子进程的方法
- linux中fork同时创建多个子进程的方法(一)
- linux中fork同时创建多个子进程的方法(一)
- LInux 子进程创建函数fork简介
- Linux进程-fork创建新进程之文件分析
- 进程信号Linux操作系统分析(2)- 进程的创建与可执行程序的加载
- linux下fork函数创建进程
- Linux 内核--fork()函数创建进程
- Linux 内核--fork()函数创建进程 (续)之copy_mem(int nr, struct task_struct *p)
- linux用户栈内核栈的设置---进程的创建: fork/execve【转】
- Linux操作系统防火墙进程查看的实用方法
- linux进程创建过程与原理 fork,vfork,clone的区别
- Linux下进程创建Fork()函数分析