主要有两个函数fork()和vfork(),他们的区别是,fork()函数创建的子进程和父进程的执行顺序是不确定的,而vfork()保证创建的子进程先执行再执行父进程。
请看下面的代码:
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
pid_t pid;
pid = fork();
if(pid < 0)
{
fprintf(stderr, "fork error: %s\n", strerror(errno));
exit(1);
}
else if(pid > 0)
{
//parent process sleep 3s, child process run first<span style="font-family:Arial, Helvetica, sans-serif;"> </span>
sleep(3);
//cpid:means child process's id
printf("parent pid = %d, ppid = %d,cpid = %d\n", getpid(),getppid(),pid);
}
else
{
printf("cpid = %d, ppid = %d\n", getpid(), getppid());
}
printf("process finished\n");
return 0;
}
程序输出:
[root@localhost process]# ./01process
cpid = 2832, ppid = 2831
process finished
parent pid = 2831, ppid = 2718,cpid = 2832
process finished
[root@localhost process]#
由此可见fork的返回值就是子进程的进程ID。