fork 是干什么的呢?
fork的作用就是创建一个新的进程。
它的函数模型如下:
#include<unistd.h>
#include<sys/types.h>
pid_t fork(void);
fork函数是从当前进程中重新创建一个新的进程。这个进程被称作是子进程,而原来的进程被称为父进程。而这个
子进程大部分都是从父进程那里复制而来的。在最下面我列出了他们之间的异同点。
fork函数调用一次,有两个返回值。 如果是父进程则会返回子进程的PID号, 如果是子进程则会返回0.系统就是
通过这两个返回值的不同来判断是子进程还是父进程。
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
pid_t pid;
char *message;
int n;
printf("fork program starting/n");
pid = fork();
switch(pid)
{
case -1:
perror("fork failed");
exit(1);
case 0:
message = "This is the child1";
n = 5;
break;
default:
message = "This is the parent2";
n = 3;
break;
}
for(; n > 0; n--) {
puts(message);
sleep(5);
}
exit(0);
}
这是一个有关fork()函数的应用。
子进程和父进程相同点:
进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs))
环境(environment)
堆栈
内存
打开文件的描述符(注意对应的文件的位置由父子进程共享, 这会引起含糊情况)
信号(signal)控制设定
nice值 (译者注:nice值由nice函数设定,该值表示进程的优先级, 数值越小,优先级越高)
进程调度类别(scheduler class)
当前工作目录
根目录
或许还有其他的,我不完全知道。
子进程独有的有:
进程号
不同的父进程号
自己的文件描述符和目录流的拷贝
资源使用(resource utilizations)设定为0
阻塞信号集初始化为空集
不继承由timer_create函数创建的计时器
不继承异步输入和输出
如果有什么不对的地方,还请多多指教。