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

5 linux process ps

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

\n\n

例如

\n\n

以下命令 ( ps -ef ) 将查看 sendmail 进程是否正在运行

\n\n
  ps \xe2\x80\x93ef | grep sendmail\n  root     9558 9544 019:05?      00:00:00/usr/sbin/sendmail-FCronDaemon-i-odi-oem-oi-t\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

所以我的问题 \xe2\x80\x93 我需要将哪些标志添加到语法“ps \xe2\x80\x93ef”中,以便从 ps \xe2\x80\x93ef 获取完整的详细信息,包括运行该进程的程序

\n\n

是否可以 ?

\n\n
    \n
  • 示例及备注
  • \n
\n\n

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

\n\n

然后我期望从命令 ps \xe2\x80\x93ef \xe2\x80\xa6\xe2\x80\xa6看到/etc/rc3.d/sendmail路径。

\n

Mik*_*maa 2

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

\n\n

例子pstree -a

\n\n
[~]# pstree -a\ninit\n  \xe2\x94\x9c\xe2\x94\x80atd\n  \xe2\x94\x9c\xe2\x94\x80atop -a -w /var/log/atop.log 600\n  \xe2\x94\x9c\xe2\x94\x80cron\n  \xe2\x94\x9c\xe2\x94\x80dbus-daemon --system --fork --activation=upstart\n  \xe2\x94\x9c\xe2\x94\x80getty -8 38400 tty4\n  \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80sshd\n  \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80sshd\n  \xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80zsh\n  \xe2\x94\x82           \xe2\x94\x94\xe2\x94\x80pstree -a\n  \xe2\x94\x9c\xe2\x94\x80udevd --daemon\n  \xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80udevd --daemon\n  \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80udevd --daemon\n  \xe2\x94\x9c\xe2\x94\x80upstart-socket- --daemon\n  \xe2\x94\x9c\xe2\x94\x80upstart-udev-br --daemon\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这里您可以看到(我的 shell)有一个zsh正在运行 command的进程pstree。它zsh本身是由 process 启动的sshd

\n\n

这是相同的输出ps -AF

\n\n
root     10006   649  0 22329  3944   0 12:48 ?        00:00:00 sshd: root@pts/2\nroot     10041 10006  0 10355  5276   0 12:48 pts/2    00:00:00 -zsh\nroot     16465 10041  0  4538  1220   0 12:52 pts/2    00:00:00 ps -AF\n
Run Code Online (Sandbox Code Playgroud)\n\n

第二列是进程 id,第三列是父进程 id。您会看到 的父进程ps -AF是 shell 进程10041。您始终可以通过逐个父进程遍历进程来追溯到 init(进程 ID 1)。

\n\n

在你的情况下,如果你想找到/etc/rc3.d/sendmail你可能需要从上往下走流程/usr/sbin/sendmail,直到你有我们下面的完整路径/etc/rc3.d

\n