2011-11-12 27 views
2

我已经在linux上运行了一个测试java程序,如下面的testuserlinux上的java进程

su testuser -c "./java Test" & 

当我看到进程时,我看到有2个进程已创建。 一个作为root用户,它产生testuser拥有的其他用户。

# ps -ef | grep Test 
root  19684 19522 0 19:18 pts/0 00:00:00 su testuser -c ./java Test 
testuser 19685 19684 1 19:18 pts/0 00:00:00 ./java Test 
root  19699 19522 0 19:18 pts/0 00:00:00 grep Test 

为什么在这里创建2个进程?

即使我终止root拥有的进程,另一个继续运行。 这里创建了2个java进程吗?

当我运行我的web应用程序[tomcat-spring]作为testuser时,我只看到一个创建的进程。为什么只有一个过程?

回答

3
  • ID为19684的进程是您启动的su命令。
  • su过程本身然后启动java进程作为一个不同用户的子进程
  • 上面输出中的第三列实际上是父进程ID,从中你可以看到java进程有进程19684( su过程)作为父项

杀死子进程(19685)也应使su进程终止(至少它在我的系统上)。

试着在我的系统上使用sleep 3600而不是java我发现当杀死su进程时,su也终止(发送信号)子进程。

+0

谢谢..我使用jconsole连接,看到它确实是一个Java过程.. – Inv3r53