fork创建子进程后子进程用while(1)循环,如何确认父退子仍运行?
问题:如何验证父进程退出后子进程仍在后台运行?
我编写了一段C语言程序,通过fork()函数创建子进程。子进程进入while(1)死循环,父进程仅打印"Hello World this is parent"后便退出程序。请问如何检查父进程已退出,但子进程仍在后台运行?
对应的代码示例如下:
#include <stdio.h> #include <unistd.h> int main(void) { int pid = fork(); if (pid == 0) { printf("This is child\n"); while (1) ; } else { printf("Hello World this is parent\n"); return 0; } return 0; }
验证方法
1. 运行程序
先编译并执行程序:
gcc test.c -o test && ./test
执行后父进程会立即打印信息并退出,子进程则进入后台持续运行。
2. 确认父进程已退出
- 可以在父进程代码中添加
printf("Parent PID: %d\n", getpid());来打印父进程PID,之后用ps命令查询:
如果父进程已退出,这条命令不会返回对应的进程条目(仅会显示grep自身的进程)。ps -ef | grep <父进程PID>
3. 验证子进程存活且变为孤儿进程
- 使用
ps -efj命令查看进程信息,重点关注子进程的PPID(父进程ID)列:
当父进程退出后,子进程会被系统的ps -efj | grep testinit(或systemd)进程领养,此时子进程的PPID会变为1,这就说明父进程已退出,子进程仍在后台运行。 - 也可以用
top命令实时监控,子进程会一直处于R(运行)状态,持续占用CPU资源。
内容的提问来源于stack exchange,提问作者Dhiman
相关产品推荐
相关产品推荐

