#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
char* msg;
int n = 0;
printf("fork begin!\n");
pid_t pid=fork();//即childpid
if (pid < 0)
{
perror("fork");
exit(1);
}
if (pid == 0)
{
msg = (char*)"child process~\n";
n = 6;
}
else
{
msg = (char*)"parent process\n";
n = 3;
}
while(n > 0)
{
printf(msg);
sleep(1);//睡眠,被挂起,进入内核态
--n;
}
return 0;
}
输出如下:
[10308005@zte.intra@LIN-240E5F8BC0B single_test2]$ g++ 多进程.cpp
[10308005@zte.intra@LIN-240E5F8BC0B single_test2]$ ./a.out
fork begin!
parent process
child process~
parent process
child process~
parent process
child process~
child process~
[single_test2]$ child process~
child process~
父进程在输出3次“parent process”就结束了,交给了bash进程接管。所以出现了
[ single_test2]$
但是子进程没有结束。会继续输出,但是此时它已经没有父进程了,所以它结束后不会再交给bash接管,也就不会出现
[single_test2]$
这就像是:bash进程是爷爷,程序的主进程是父亲,子进程是儿子。父亲“挂”了后,爷爷给父亲收尸。爷爷不管儿子,所以儿子进了孤儿院~