为什么用ps看不到我的进程?

时间:2022-08-20 12:21:43
很简单的程序,如下:

int main()
{
for (int i = 1; i <= 10; i++)
{
int r;

r = fork();
if (r == 0)
{
for (;;) sleep(10);
}
}

sleep(100000);
}


在程序中fork了10个子进程,但是用ps -ef只能看到父进程,子进程都看不到了怎么会这样???
RetHat Linux 9.0

7 个解决方案

#1


是有点怪,我在7.2下都能看到。
但是9.0下不一定了,我有个程序,有两个线程,在9.0下运行的,从来只能看到一个进程,照例来说,在7.2下面应该能看到3个线程在运行的。

#2


对了你还可以在fork后,加个printf语句来判断你的子进程有没有执行。

#3


奇怪的是:

int main()
{
for (int i = 1; i <= 10; i++)
{
int r;

r = fork();
if (r == 0)
{
printf("%d,", i);    //<<---只加这一行!
for (;;) sleep(10);
}
}

sleep(100000);
}


加了个printf上去,所有进程又都能看到了。
只要把printf去掉,进程又看不到了。:(

#4


ps -aux

#5


ps -aux不一定能看到所有进程,看到的不一定很top出来的一样,可pstree不加printf也可以看到10个fork出来的进程,pstree -p可以看具体进程号。一目了然

#6


呵呵,分给我啦,linux9的ps有毛病啦。

#7


ps -a -l

#1


是有点怪,我在7.2下都能看到。
但是9.0下不一定了,我有个程序,有两个线程,在9.0下运行的,从来只能看到一个进程,照例来说,在7.2下面应该能看到3个线程在运行的。

#2


对了你还可以在fork后,加个printf语句来判断你的子进程有没有执行。

#3


奇怪的是:

int main()
{
for (int i = 1; i <= 10; i++)
{
int r;

r = fork();
if (r == 0)
{
printf("%d,", i);    //<<---只加这一行!
for (;;) sleep(10);
}
}

sleep(100000);
}


加了个printf上去,所有进程又都能看到了。
只要把printf去掉,进程又看不到了。:(

#4


ps -aux

#5


ps -aux不一定能看到所有进程,看到的不一定很top出来的一样,可pstree不加printf也可以看到10个fork出来的进程,pstree -p可以看具体进程号。一目了然

#6


呵呵,分给我啦,linux9的ps有毛病啦。

#7


ps -a -l