我有一个程序,我想获得任务的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给出什么? 如果有人帮助我并给我一些提示如何做到这一点会很棒吗? 非常感谢你
答案 0 :(得分:2)
waitpid()
等待子进程终止。它与某个与此过程无关的任意过程的状态无关。
关于Linux的事情是,它不是一些神秘的黑盒子,其工作是一个深刻的秘密。如果有人想知道如何在Linux上做某事,他们所要做的就是查看来源。
我确定您知道如何使用ps
命令,这完全符合您的要求。
您可以在https://gitlab.com/procps-ng/procps上查看ps
命令的源代码,看看ps
如何做到这一点,然后自己做同样的事情。