Command: failed stdout: yes stderr: no
Before command completion, additional instructions may appear below.
Method error (/etc/methods/ucfgtty):
0514-062 Cannot perform the requested function because the
specified device is busy.
删除一个busy的tty0端口
一个tty端口不可用,忙,或者该tty端口一直死锁,可能是因为有进程占用着该端口或者其他原因。下面我们示例如何清除一个被占用的tty端口。以下的例子假设tty端口是tty0。需要注意的是,只有root用户才能够完成以下的这些工作。
1、首先查看tty正在处理什么进程的请求:
ps -lt tty0
该命令的返回格式应该类似于下面的形式:
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
240001 S 202 22566 3608 0 60 20 781a 444 70201e44 tty0 0:00 ksh
这里,进程ID (PID)是 22566。为了使用这个端口,我们需要杀死这个进程:
kill 22566
完成以后,我们可以重新用ps -lt tty0 来查看一下是否还有进程占用tty,如果刚才的kill命令没有杀死进程,那么给kill命令加参数 -9。例如:kill -9 22566
请注意,如果您发现占用tty端口的进程是一个slip连接的进程,那么不要用带-9参数的kill命令去杀死它,否则有可能引起slip连接进程在/etc/locks目录中遗留下来一个锁文件。如果真的杀死了slip进程,而且发现有这个锁文件,那么我们要手工删除它。
2、其次我们需要查看什么进程占用或者正在试图占用tty端口:
ps -ef | grep tty0
如果这个命令返回的形式是:
root 19050 1 0 Mar 06 - 0:00 /usr/sbin/getty /dev/tty
请注意,这里“-”符号位于日期和时间之间,而正常情况这里应该是tty名称。这个现象表明这个tty端口没有连接正确的电缆线,系统登录进程(getty)正在试图打开tty端口,但是该进程无法收到正确的串口信号而挂住。解决这个问题的方法是使用正确的null modem电缆。当getty可以打开tty端口的时候,上例中“-"就会被具体的tty号 *** 替换。
如果您不希望通过tty0端口进行登录,而是用这个端口做其他用途,那么请执行命令:
pdisable tty0
如果此时与tty0相关的所有进程都清除了,但是tty0仍然不可用,那么请执行下面的步骤。
3、执行命令:
fuser -k /dev/tty0
这个命令查询任何在这个tty端口上运行的程序,并且杀死它们,并且显示出PID。如果这个时候,tty0仍然不可用,那么进行下面的步骤。
4、执行命令 strreset 来对从tty端口出去的数据进行刷新重置。这是因为:tty锁死有可能是因为对远程tty的连接已经丢失,但是有数据在当前这个端口的缓冲池中无法发出。
请注意,如果strreset命令真的可以解决问题,那么tty端口一定有电缆的硬件故障或者配置问题。因为在通常情况下,对远程端口失去连接之后,数据的缓冲池会自动刷新,不需要人工的干预。strreset的具体用法是这样的,我们首先需要知道tty设备的主设备号 *** 和辅设备号 *** 。执行命令:
ls -al /dev/tty0
返回应该是以下的格式:
crw-rw-rw- 1 root system 18, 0 Nov 7 06:19 /dev/tty0
这表明主设备号 *** 为18,辅设备号 *** 为0。
那么此时,我们使用strreset命令的格式如下:
/usr/sbin/strreset -M 18 -m 0
会员注册
会员登录
个人空间