使用 USB 转串行电缆,我可以通过以下方式成功连接到一台设备screen /dev/ttyUSB0 115200
屏幕内是否有命令可以关闭并返回我的终端提示?这是在 RHEL-8.10 中。 并且ctrl-d
没有影响。ctrl-c
ctrl-z
使用 USB 转串行电缆,我可以通过以下方式成功连接到一台设备screen /dev/ttyUSB0 115200
屏幕内是否有命令可以关闭并返回我的终端提示?这是在 RHEL-8.10 中。 并且ctrl-d
没有影响。ctrl-c
ctrl-z
我知道如何查看我是否在屏幕中:我创建了一个别名alias inscreen = 'echo $STY'
。
但是今天早些时候,我screen
在screen
没有注意到的情况下不小心输入了 a ,并且在某种程度上它让我后来犯了一个错误。
我在screen
(外屏)内输入(内屏)时观察到的事情screen
:
screen -ls
仅显示与该屏幕相关的 1 个结果echo $STY
内外屏都一样ctrl + A
并且ctrl + D
可以从内屏分离到无屏,但是screen -r
返回时,内屏和外屏都存在exit
两次:内屏exit
-> 外屏exit
所以我的问题是,无论如何我可以知道我在一个屏幕的屏幕中吗?
PS 第一次输入screen
时,会弹出一些文字:
如果screen
在 a中输入screen
,则不会显示这些提示。
假设我想在 GNU 中绑定一个键序列screen
以跳转到特定窗口。我可能会这样做:
bind ^t exec screen -X select foo
(我故意简化了这一点;现实世界的应用程序exec
sa 命令动态地确定要切换到哪个窗口,然后运行该screen -X
命令。)
伟大的; 这很好用。当我screen -x
从不同的机器附加(通过)到同一个会话时,问题就出现了。在新机器上,^a^t
按预期执行并切换到窗口。但是,如果我回到原来的机器,保持新机器连接,然后^a^t
切换到新机器上的窗口。如果我拆下新机器,一切都会恢复正常工作。
请注意,这是一个会话,所以-S
没有用。会话不受密码保护。它似乎也与exec
机器无关:虽然在原始机器上手动运行screen -X select foo
insidescreen
可以正常工作,但在原始机器上的单独终端(即 outside screen
)上运行它仍然会切换另一台机器上的窗口。
如何强制screen -X
仅影响运行它的同一台计算机上的附加用户?(如果这更容易的话,同时影响用户/机器也是可以接受的。)
在 gnu 屏幕中,我可以使用Ctrl-a Shift-a <name>
. 当我在 bash 提示符内时,我可以通过检查变量来确定我是否在屏幕内$STY
。我可以检查一些变量并确定当前打开的窗口的名称吗?
我正在尝试在虚拟机中运行 gnu screen。要创建一个新的屏幕窗口,我按 ctrl+ac,但这个组合键会显示 qemu 监视器。如何将这些击键发送给客人?
我在多个screen
会话下运行了多个 ANN 培训过程。当我进入一个屏幕时,我看到一个训练过程正在运行。
现在,我想在不杀死屏幕的情况下杀死屏幕内的特定进程。
我可以按CTRL + C
。但是,这会在屏幕上产生一些不需要的垃圾文本。
我怎样才能干净地做到这一点?
如果我尝试使用进程 ID 终止进程,我会感到困惑。对我来说,不可能识别单个过程。因为,他们正在运行具有相同文件名的文件。
怎么做?
注意我正在使用 TensorFlow 和 Keras。
NB#2,我正在使用 SSH。
我有一个脚本(不是我写的,我无法修改它)必须运行数天,有时会失败(退出并出现错误)。
在这种情况下,我所要做的就是重新启动服务器(目前没有更好的解决方案),然后重新启动脚本。目前我这样做:
通过 SSH 登录
screen -S job
./myscript.sh
开始工作(假设这个脚本只包含:dothis
并且这个过程可能会因错误而退出)
CTRL A,D与屏幕分离
……等几个小时……
登录,使用 恢复屏幕screen -r job
。
如果仍在运行,请分离并稍后返回。
如果脚本失败,sudo reboot
请从第 1 步开始,以使长期作业继续进行。
如何在没有人工干预的情况下做到这一点?
如果脚本存在错误,如何自动执行此操作并让服务器自动重新启动,然后重新启动脚本?
在如何在屏幕中运行程序,将所有输出重定向到文件并分离的示例中,“东西”的含义是什么,因为该命令位于 $'' 区域之后。
screen -S workspace -X stuff $'ps aux > output-x\n'
我正在尝试确定我正在运行的命令是否在 SSH 会话中。通常,通过检查$SSH_CONNECTION
或遍历进程树并寻找sshd
.
但是,如果我screen
在本地启动一个会话,然后通过 SSH 重新连接它,那么这些都不起作用。
在重新附加的屏幕会话中是否有某种方法可以确定会话当前附加到哪个外壳?
进程树看起来像shell(X) --> screen(Y) --> systemd(1)
,这是有道理的,因为当我退出本地终端时,屏幕会话可能会被重新设置。
screen -ls
没有说什么(Attached)
,只有 PID Y
,没有关于它当前连接位置的有用 PID。
它所附加的进程树shell(A)
包含一个子进程screen(B)
,但我找不到链接 PIDY
和B
. 我什至试图找到屏幕正在使用的 unix 套接字的另一端,但它是空的。(甚至检查为root
)。
这只是不可能的事情吗?
screen -ls
似乎没有表明我使用了多少连接screen -x
(多显示模式)。
例子:
screen # create first screen
screen -ls
screen -x # attach to first screen from a different location
screen -ls
两个screen -ls
命令都显示完全相同的信息。没有迹象表明同一个屏幕现在有 2 个附件。有没有办法证明这一点?