Linux进程中 while((pid1=fork())==-1);if(pid1==0) {对该进程处理并exit后} else { } 先后执行if-else?

2025年03月24日 07:46
有2个网友回答
网友(1):

这个时候已经变成两个进程了,如果在终端ps会发现两个名字一样的进程。
如果能新建一个文件就能看出来了。如果那个进程能正确新建一个文件就说明进程已经启动成功。
当然,每一进程都是按照c语言规则执行代码程序,不会像你说的那样诡异的跳回上一个if语句。

网友(2):

很简单,打印父进程pid,然后创建子进程,并打印子进程pid,然后再创建一个子进程,并打印pid。\r\n\r\n#include \r\n#include \r\n#include \r\n\r\nint main()\r\n{\r\n int pid1, pid2;\r\n\r\n printf("Parent's PID is %d\n", getpid());\r\n\r\n pid1 = fork();\r\n\r\n if (pid1 == 0)\r\n {\r\n printf("Child1's PID is %d\n", getpid());\r\n exit(0);\r\n }\r\n else if(pid1 < 0)\r\n {\r\n printf("fork error!\n");\r\n exit(1);\r\n }\r\n\r\n wait(NULL);\r\n printf("Child1 (PID=%d) already exit\n", pid1);\r\n\r\n pid2 = fork();\r\n\r\n if (pid2 == 0)\r\n {\r\n printf("Child2's PID is %d\n", getpid());\r\n exit(0);\r\n }\r\n else if(pid2 < 0)\r\n {\r\n printf("fork error!\n");\r\n exit(1);\r\n }\r\n\r\n wait(NULL);\r\n printf("Child2 (PID=%d) already exit\n", pid2);\r\n\r\n return 0;\r\n}