一位朋友使用远程计算机通过 SSH 连接到我的计算机并运行以下 python 脚本:
而(1):
....打印“你好世界”
(此脚本只是连续打印“hello world”)。
我现在已登录到我的机器。我如何查看我朋友正在运行的脚本的输出?
如果有帮助,我可以“发现”我朋友正在使用的脚本:
我@home:~$ ps aux | grep justprint.py
朋友 7494 12.8 0.3 7260 3300 ? Ss 17:24 0:06 python TEST_AREA/justprint.py
朋友 7640 0.0 0.0 3320 800 点/3 S+ 17:25 0:00 grep --color=auto 只是
我应该采取什么步骤才能在屏幕上查看“hello world”消息?
答案1
您通常看不到另一个人的程序的输出。在该列中查看您的 grep 命令在 tty 上运行pts/3
,而您朋友的命令是在 tty 上运行?
,这意味着它与终端分离。
您可以看到输出的去向ls -l /proc/7494/fd/
(其中 7494 是您朋友进程的进程 ID)——尽管如果您不是以 root 身份运行,出于安全原因您可能甚至看不到。 (所以尝试一下sudo ls -l /proc/7494/fd/
。)
你可能可以做一些可怕的、可怕的、笨拙的事情来改变程序输出的去向。但一般来说,你不能也不应该这样做。
如果您的朋友想与您共享输出,方法是将程序的输出重定向到文件,然后使您可以读取该文件:
$ python -u TEST_AREA/justprint.py > /tmp/justprint.out &
$ chmod a+r /tmp/justprint.out
(在这种情况下,“你可读”是“每个人都可读”;只需多做一点工作,你就可以建立一个共享组,这样只有你们两个可以交换输出。)
(请注意,Python 默认情况下会缓冲输出 - 将其关闭就是它的用途-u
。)
答案2
如果您在计算机上具有 root 访问权限并且您的朋友愿意执行一些命令,则可以:
- [根]
screen
必须是setuid 根:chmod u+s /usr/bin/screen
- [朋友]启动后
screen
,他可以给会话起一个名字,这样更容易:screen -S "shared_session"
- [好友]启用多用户模式:
Ctrl-a :multiuser on
- [朋友]使您能够访问他的屏幕会话:
Ctrl-a :acladd you
- [朋友](可选)限制您的只读访问权限:
Ctrl-a :aclchg you -w "#"
- [您]附加到朋友屏幕上:
screen -x friend/shared_session
setuid root 可能有点危险......