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