You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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命令查询:
    ps -ef | grep <父进程PID>
    
    如果父进程已退出,这条命令不会返回对应的进程条目(仅会显示grep自身的进程)。

3. 验证子进程存活且变为孤儿进程

  • 使用ps -efj命令查看进程信息,重点关注子进程的PPID(父进程ID)列:
    ps -efj | grep test
    
    当父进程退出后,子进程会被系统的init(或systemd)进程领养,此时子进程的PPID会变为1,这就说明父进程已退出,子进程仍在后台运行。
  • 也可以用top命令实时监控,子进程会一直处于R(运行)状态,持续占用CPU资源。

内容的提问来源于stack exchange,提问作者Dhiman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 16:02:15