代码示例
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/wait.h>
int main(int argc, const char* argv[]) {
pid_t pid = -1;
int status = 0;
int ret = -1;
// 创建子进程。若创建成功,则在子进程中返回0,父进程中返回子进程的pid
pid = fork();
if (0 < pid) {
perror("fork");
return 1;
}
if (0 == pid) { // 子进程
printf("这是子进程。进程号 = %d, 父进程号 = %d\n", getpid(), getppid());
exit(0); // 退出子进程,或者return。
} else { // 父进程
printf("这是父进程。进程号 = %d, 子进程号 = %d\n", getpid(), pid);
}
ret = wait(&status); // 父进程等待回收子进程资源
if(-1 == ret) {
perror("wait");
return 1;
}
return 0;
}
GDB调试默认跟踪父进程,在fork函数调用之前设置跟踪子进程。那么gdb就会跟踪子进程。
set follow-fork-mode child