当我在本地工作时,我已经在远程机器上运行了一个脚本。我可以以同一用户身份通过 SSH 连接到机器,并查看在ps
.
$ ps aux | grep ipcheck
myuser 18386 0.0 0.0 18460 3476 pts/0 S+ Dec14 1:11 /bin/bash ./ipchecker.sh
Run Code Online (Sandbox Code Playgroud)
它只是在本地会话上输出到标准输出(我从./ipchecker.sh
本地终端窗口运行,没有重定向,没有使用screen
等)。
无论如何,我可以从 SSH 会话中查看此运行命令的输出(不停止它)吗?
到目前为止,我发现的最好的方法是使用,strace -p 18386
但我在屏幕上看到成群的文本,它太详细了。我可以停下来strace
,然后筛选输出,发现文本带打印到标准输出,但它非常长且令人困惑,很明显,当它停止时,我可能会错过一些东西。我想找到一种方法来实时查看脚本输出,就像我在本地工作一样。
任何人都可以改进吗?显而易见的答案是通过重定向或在screen
会话等中重新启动脚本,这不是关键任务脚本,所以我可以这样做。相反,我认为这是一个有趣的学习练习。
我在 SSH shell 上有一个正在运行的程序。我想暂停它并在我回来时能够取消暂停它的执行。
我想到的一种方法是将其所有权转移到屏幕外壳,从而使其在那里运行。
是否有不同的方式进行?
当登录到一台机器时,我可以从w
. 作为系统管理员,我是否可以在用户不知情的情况下窃听此终端?换句话说,我希望看到在这个终端上所做的一切都作为我自己终端上的输出。
请注意以下事项:
strace
解决方案)。接近的一种解决方案是建议使用gdb
. 但这只能让我看到另一个终端的标准输出。我试过的
我从我的终端试过这个:
tee /dev/pts/user_pts </dev/pts/user_pts
Run Code Online (Sandbox Code Playgroud)
这使我可以在用户键入时看到用户在另一个伪终端中键入的每个字符。问题是,每隔几个字符,它就会“跳过”:它会在一个终端设备上显示一个流氓字符,而不是另一个。它还可以防止从用户的伪终端设备执行任何命令。我不确定为什么会发生这种情况以及是否有办法改进它。
我想看什么
USER TERMINAL | MY TERMINAL
$ echo "Test" | # slick_command_here
Test | echo "Test"
$ | Test
Run Code Online (Sandbox Code Playgroud) 我有一些输出TTY1
,我认为可能会提供有关为什么我的最后一个 GUI 会话冻结的线索(CtrlAltBackspace能够让我回到终端并重新加载 GUI)。
但是,我似乎无法找到一种复制屏幕上文本的方法,但是(我希望)还没有从文件/设备中消失。有什么建议?
bash ×1
clipboard ×1
disown ×1
gnu-screen ×1
job-control ×1
linux ×1
process ×1
ssh ×1
terminal ×1
tty ×1