我正在尝试使用串行接口(运行 Scientific Linux 6.1)连接到 Khepera 机器人,我使用命令screen /dev/ttyS0
进行通信,工作正常,但后来我想关闭它并使用 MATLAB,但我发现没有办法关闭该会话,所以我只是在终端窗口运行屏幕上单击 X。
现在我的 ttyS0 端口无法打开。MATLAB 和 screen 都说无法打开该端口。
我如何重置 ttyS0 端口?我的意思是,一个选择是重启电脑。但是如何在不重启电脑的情况下做到这一点?
终止串行通信的正确方法是什么?
另外,以下命令有什么作用?我用 Google 找到了它并运行了它,但什么也没发生。它做了什么坏事吗?我需要修复吗?
/sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100
答案1
您可以发出命令screen -ls
来获取所有当前屏幕会话的状态。然后使用选项screen
-r
“重新连接”断开的
screen
会话,并-X
使用选项终止会话。
以下是一个示例 shell 会话。我使用选项以“分离”模式(在后台)-d -m
启动 会话,以模拟使用 关闭会话。from 的输出是进程 ID 号,它将用于“重新连接”到该特定会话。screen
X on the terminal window running screen
5207
screen
-ls
screen
$ screen -d -m /dev/ttyS0
$ screen -ls
There is a screen on:
5207..host (10/04/2011 10:16:50 AM) (Detached)
1 Socket in /var/run/screen/S-user.
$ screen -r 5207 -X kill
$ screen -ls
No Sockets found in /var/run/screen/S-user.
$
答案2
终止串行通信的正确方法是什么?
从编程的角度来看——只需close()
打开文件描述符即可。退出程序会自动执行此操作。但是,你确实不是退出屏幕。
GNU Screen 最常用的功能之一是分离并重新连接到会话。关闭窗口时,Screen 的“服务器”部分仍在运行,您可以使用 重新连接到它screen -r
。
使用C-a,k来真正地关闭 Screen 窗口。
另外,以下命令有什么作用?我用 Google 找到了它并运行了它,但什么也没发生。它做了什么坏事吗?我需要修复吗?
/sbin/agetty -L -f /etc/issueserial 9600 ttyS0 vt100
agetty
是一个 TTY 监视程序。它的工作是重新初始化终端设备的配置并显示登录提示;您可以通过切换到控制台登录提示来查看它的运行情况tty1
... tty6
. 1
在这种情况下,当您启动时,它会向机器人agetty
发送登录提示2login:
,机器人可能会将其视为垃圾丢弃。这通常是无害的,除非机器人以某种方式将“ ”解释为“启动世界接管”。所做的配置agetty
也不应该破坏任何东西。
1请注意,getty 不处理实际登录 - 它只要求输入用户名。输入后,agetty
开始/sbin/login
执行登录过程。
2它还会发送/etc/issueserial
文本文件的内容,但由于您在 Google 上找到了该命令,所以很可能您甚至没有该文件。