运行进程的命令

use*_*882 8 shell process-management

假设我使用以下命令运行该进程:

myapp -e -c -f myapp.config > /var/log/myapp/myapp.log 2>&1
Run Code Online (Sandbox Code Playgroud)

过了一会儿,我只有pidmyapp过程中,如1234有没有办法让所有标志的命令和输出重定向到myapp.log通过某种方式只pid

Sté*_*las 10

ps -o args= -p "$pid"
Run Code Online (Sandbox Code Playgroud)

将告诉您提供给进程执行的最后一个命令的参数列表(或者如果它没有执行任何命令,则它的父级执行的命令......),前提是该进程之后没有覆盖其参数列表。

ps将显示 arg 列表与空格连接并达到一个限制,您可以ps通过添加几个-w选项来提高某些实现的限制)。在 Linux 上,您可以在/proc/$pid/cmdline.

lsof +fg -ap "$pid" -d 0-2
Run Code Online (Sandbox Code Playgroud)

将告诉您进程的 stdin、stdout 和 stderr 文件描述符指向什么以及它们被打开的模式(例如,W,AP对于带有附加的只写,就像>>在 POSIX shell 中使用了重定向一样)。


小智 1

使用ps -f您可以检查参数列表,也可以将其重定向到任何文件。

所以,在这种情况下只需使用ps -ef | grep 1234 > myapp.log

请检查此ps 手册页

  • @Arronical 是的,你是对的。您可以通过排除 grep 命令来避免这种情况:`ps -ef | grep 'foo' | grep 'foo' | grep -v grep` (2认同)