Answers:
ps -o args= -p "$pid"
告诉您分配给最后一个执行该过程的命令的参数列表(如果未执行,则执行其父级执行的命令...),前提是该过程之后未覆盖其参数列表。
ps会显示arg列表由空格串联起来,并且可以ps通过添加几个-w选项在某些实现中提高上限。在Linux上,您可以在中看到用NUL字节分隔的arglist /proc/$pid/cmdline。
lsof +fg -ap "$pid" -d 0-2
会告诉您进程的stdin,stdout和stderr文件描述符指向什么以及它们打开的方式(例如,W,AP对于只写带有append的情况,就像>>在POSIX shell中使用了重定向一样)。
readlink /proc/$pid/fd/1
您可以使用ps命令,并指定pid来与-p开关一起检查,使用-f开关来给出完整列表,或-l更详细的长列表。
作为输出示例:
$ sleep 60 &
[1] 31441
$ ps -lp 31441
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 0 31441 31319 0 80 0 - 1423 hrtime pts/3 00:00:00 sleep
$ ps -fp 31441
UID PID PPID C STIME TTY TIME CMD
root 31441 31319 0 10:44 pts/3 00:00:00 sleep 60
但是,这确实会输出标题行,您可能不需要在日志文件中。-h如果您的pid为1234,则可以使用选项进行调整:
ps -lhp 1234 >> /var/log/myapp/myapp.log 2>&1
请注意,我已使用重定向输出>>来追加到您的日志文件。
tail -n+1(需要GNU,但Q是Linux / Ubuntu)。或避免使用ps -h{f,l}p 1234(也是GNU)问题。
tail -n1绝对可以在Ubuntu上运行,为什么有+必要?
tail -n+2显示除第一行以外的所有行。tail -n1仅显示最后一行。比较:seq 1 10 | tail -n+2等等。
-h因为这样可以避免不必要的管道和额外的过程。
ps -ef | grep 'foo' | grep -v grep
grep -v我使用这个技巧:grep '123[4]'
lsof检测进程是否正在重定向到myapp.log