我有一个运行时间很长的bash
实例(在screen
会话中),该实例在一个循环内执行一组复杂的命令(每个循环执行管道,重定向等)。
长命令行是在终端内部编写的-不在任何脚本中。现在,我知道bash进程ID,并且我具有root用户访问权限-如何查看在其中执行的确切命令行bash
?
bash$ echo $$
1234
bash$ while true ; do \
someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done
在另一个Shell实例中,我想查看在PID 1234中执行的命令行:
bash$ echo $$
5678
bash$ su -
sh# cd /proc/1234
sh# # Do something here that will display the string \
'while true ; do someThing | somethingElse 2>/foo/bar | \
yetAnother ; sleep 600 ; done'
这可能吗?
编辑#1
为我得到的一些答案添加反例。
关于使用
cmdline
under/proc/PID
:至少在我的情况下不起作用。这是一个简单的例子:$ echo $$ 8909 $ while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
在另一个外壳中:
$ cat /proc/8909/cmdline bash
使用
ps -p PID --noheaders -o cmd
同样没有用:$ ps -p 8909 --no-headers -o cmd bash
ps -eaf
也无济于事:$ ps -eaf | grep 8909 ttsiod 8909 8905 0 10:09 pts/0 00:00:00 bash ttsiod 30697 8909 0 10:22 pts/0 00:00:00 sleep 30 ttsiod 31292 13928 0 10:23 pts/12 00:00:00 grep --color=auto 8909
也就是说,我正在寻找的ORIGINAL命令行没有输出-即
while true ; do echo 1 ; echo 2>/dev/null ; sleep 30 ; done
。