让(父)进程在Linux shell中执行命令

时间:2013-12-29 11:37:59

标签: linux process ps

请指教,如何验证执行该程序的程序?

例如

以下命令(ps -ef)将在此进程运行时查看进程sendmail

  ps –ef | grep sendmail
  root     9558 9544 019:05?      00:00:00/usr/sbin/sendmail-FCronDaemon-i-odi-oem-oi-t

我想要找到的是执行二进制文件的脚本 / usr / sbin / sendmail

所以我的问题 - 我需要在语法“ps -ef”中添加哪些标志才能从ps -ef获取完整的详细信息,包括运行该进程的程序

有可能吗?

  • 示例和备注

如果 /etc/rc3.d/sendmail 运行二进制文件 / usr / sbin / sendmail

然后我希望从命令ps -ef ......中看到 /etc/rc3.d/sendmail PATH。

1 个答案:

答案 0 :(得分:2)

您需要的是树输出并了解父进程。

示例pstree -a

[~]# pstree -a
init
  ├─atd
  ├─atop -a -w /var/log/atop.log 600
  ├─cron
  ├─dbus-daemon --system --fork --activation=upstart
  ├─getty -8 38400 tty4
  │   ├─sshd
  │   └─sshd
  │       └─zsh
  │           └─pstree -a
  ├─udevd --daemon
  │   ├─udevd --daemon
  │   └─udevd --daemon
  ├─upstart-socket- --daemon
  ├─upstart-udev-br --daemon

在这里你可以看到有一个zsh(我的shell)正在运行命令pstree的进程。 zsh本身由流程sshd启动。

以下是ps -AF的相同输出:

root     10006   649  0 22329  3944   0 12:48 ?        00:00:00 sshd: root@pts/2
root     10041 10006  0 10355  5276   0 12:48 pts/2    00:00:00 -zsh
root     16465 10041  0  4538  1220   0 12:52 pts/2    00:00:00 ps -AF

第二列是流程ID,第三列是父流程ID 。您看到ps -AF的父级是shell进程10041。您始终可以通过父进行父进程跟踪将进程追溯到init(进程ID 1)。

在您的情况下,如果您想查找/etc/rc3.d/sendmail,则可能需要从/usr/sbin/sendmail开始处理流程,直到您拥有/etc/rc3.d下的完整路径。