linux-get C ++中PID的任务状态

时间:2016-01-30 14:06:34

标签: c++ linux

我有一个程序,我想获得任务的PID并返回其状态(运行,停止和...)及其退出状态(死,僵尸和......)

我知道C#和java但不了解linux和C ++,这就是我发现的......

#include<linux/kernel.h>
#include<linux/syscalls.h>
asmlinkage int sys_pidstat(int pid){

      int status = 0;

      int rtn = kill(pid, 0);
      if (rtn == -1 && errno == ESRCH)
      {
          return 0;
      }

      rtn = waitpid(pid, &status, WNOHANG | WUNTRACED | WCONTINUED);

      if (rtn == 0) // still live
      {
        return 0;
      }

      std::cout << "Probably success. Errno: " << errno << ". StrError: " << strerror(errno) << std::endl;
      if (WIFEXITED(status))
      {
        return 1;
      }

      return 0;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ;
}

我发现waitpid可能会返回状态..但是无法改变它.. waitpid需要一个pid作为输入......我应该作为pid给出什么? 如果有人帮助我并给我一些提示如何做到这一点会很棒吗? 非常感谢你

1 个答案:

答案 0 :(得分:2)

waitpid()等待子进程终止。它与某个与此过程无关的任意过程的状态无关。

关于Linux的事情是,它不是一些神秘的黑盒子,其工作是一个深刻的秘密。如果有人想知道如何在Linux上做某事,他们所要做的就是查看来源。

我确定您知道如何使用ps命令,这完全符合您的要求。

您可以在https://gitlab.com/procps-ng/procps上查看ps命令的源代码,看看ps如何做到这一点,然后自己做同样的事情。