gpt4 book ai didi

c++ - 使用 PID 跟踪父进程并显示它的子进程和孙进程 PID

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:00 26 4
gpt4 key购买 nike

我设法为每个单独的进程输出正确的进程 ID 顺序,但我的问题是我无法显示子进程的 PID。

我的程序能够打印 parent 的 PID 和孙子的 PID。我确实看到了 child 的 PID,但它显示为 parent 的 PID。

如何计算 child 的 PID 并将其添加到我的代码中?我希望我的输出显示 parent 的 PID、 child 的 PID 和孙子的 PID。

#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main()
{
pid_t pid; //process id
const char *message;
int n;
int exit_code;

cout << "\nfork program starting\n";
pid = fork();
switch ( pid ) {
case -1:
cout << "Fork failure!\n";
return 1;
case 0:
pid = fork();
cout << "Parent PID = " << getppid() << endl;
switch ( pid ) {
case -1:
cout << "Fork Failure!\n";
return 1;
case 0:
cout << "Grandchild finished: PID = " << getpid() << endl;
message = "This is the child\n";
n = 5;
exit_code = 9;
break;
}
}

//waiting for child to finish
if ( pid != 0 ) { //parent
int stat_val;
pid_t child_pid;
child_pid = wait( &stat_val ); //wait for child
if (WIFEXITED (stat_val))
cout << "child exited with code " << WEXITSTATUS (stat_val) << endl;
else
cout << "child terminated abnormally!" << endl;
}
exit ( exit_code );
}

screenshot

最佳答案

你似乎没有在第二次 fork() 之前打印子 PID

改变:

case 0:
pid = fork();
cout << "Parent PID = " << getppid() << endl;
switch ( pid ) {
case -1:
cout << "Fork Failure!\n";
return 1;
[...]
}

到:

case 0:
cout << "Child PID = " << getpid() << endl;
pid = fork();

cout << "Parent PID = " << getppid() << endl;
switch ( pid ) {
case -1:
cout << "Fork Failure!\n";
return 1;
[...]
}

关于c++ - 使用 PID 跟踪父进程并显示它的子进程和孙进程 PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35019154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com