Как избавиться от сообщения "All ports busy". Как освободить захваченный или зависший порт в Солярис 2

INFODOC ID: 13713

1) Используя программу admintool, отключите (disable) или удалите (delete) порт-монитор для зависшего порта. Затем, указав соответствующий порт, выполните команду:

   # tip -9600 /dev/cua/a

для того, чтобы проверить доступность порта.

2) Убедитесь, что при использовании команды tip, Вы не пытаетесь обратиться к устройству, описанному неправильно в файле /etc/remote. В команде tip используйте устройство /dev/cua/a, но не /dev/term/a.

3) Возможно, что имеется проблема права доступа к устройству. Измените права доступа и владельца модемного порта:

   # chmod 666 /dev/cua/a 
   # chown uucp /dev/cua/a

Для того, чтобы посмотреть значения прав доступа и владельца используйте такие опции в команде ls, которые позволяют этой команде показать значения соответствующие конечному файлу, а не ссылке (link) на него:

   # ls -Ll /dev/cua/a 

Замечание: При грубом завершении программы cu (например по "kill -9") владельцем устройства останется пользователь, выполнявший cu последним.

3) Проверьте, существует ли в директории /var/spool/locks файл блокировки устройства. Если файл, например, LK.032.028.001 существует, то посмотрите его содержимое с помощью команды cat. Вы увидите число, которое является PID процесса поставившего блокировку. Для того, чтобы посмотреть является ли этот процесс активным, используйте команду ps. Если Вы получаете сообщение "All ports busy", то завершите процесс по команде kill. Если состояние процесса стало "defunct", то, к сожалению, потребуется перезагрузка системы. Такое состояние возникает, когда драйвер ожидает ответ от устройства и находится на уровне недоступном для команды kill.

4) Бывает ситуация когда какой-либо другой процесс уже открыл этот порт. Это может быть другой экземпляр tip или программа lp. Это также может быть программа порт-монитора.

Выполните команды с правами пользователя root (используйте соответствующее устройство):

   # fuser /dev/cua/a 
   /dev/cua/a:      652o     651o 
                                 
   # ps -ef | grep 652
   # ps -ef | grep 651

Идентификаторами процессов (PID), владеющими устройством /dev/cua/a являются 652 и 651 (отбросьте символ "o").

Если процессом, использующим порт, является /usr/bin/login или ttymon, то, либо кто-то звонит в Вашу машину и по-этому модем активен, или модем постоянно выдаёт сигнал DCD. В последнем случае проверьте настройки модема и положение переключателей.

5) Если-же этим процессом является "ttymon", то существуют два способа уничтожить процесс. Наилегчайший - это использование программы admintool. Выберите последовательность действий Browse -> Serial Ports -> a/b -> Edit -> Delete Service. После этого Вы должны иметь возможность выполнить для данного порта такие команды, как cu или tip, т.к. конфигурация порта для входящих звонков (dial-in) будет снята.

Второй способ - это использование команды удаления службы порта:

   # pmadm -r -p zsmon -s 
(для определения значения SVCTAG используйте команду pmadm -l)

6) Для уничтожения "лишних" процессов, переведите систему в однопользовательский режим, а затем верните в многопользовательский. Для этого завершите Windows, войдите как root, подайте команду:

   # init S

после выхода в однопользовательский режим нажмите "control-d".

7) Следующие действия удаляют устройства и пересоздают их без проведения перезагрузки системы:

a) Определите физические имена устройств:

   # ls -al /dev/term/a
   lrwxrwxrwx   1 root     root          32 Jul 27  1995 /dev/term/a -> 
   ../../devices/obio/zs@0,100000:a

   # cd /devices/obio

   # ls -al zs*:a*
   crw-------   1 lp       tty       29,  0 Feb 19 14:01 zs@0,100000:a
   crw-rw-rw-   1 uucp     uucp      29,131072 Dec 26 14:08 zs@0,100000:a,cu

Каждый последовательный порт имеет два файла устройства. Файлы имеют различные младшие (minor) номера устройств, что позволяет операционной системе понять, какой драйвер должен быть использован. Устройство a,cu (/dev/cua/a) используется для управления модемом, а также для исходящих транзакций.

b) удалите устройства:

   # rm zs*:a*             

c) затем удалите ссылки на устройства

   # cd /dev/term
   # rm a
   # cd /dev/cua
   # rm a

d) Создайте устройства в директории /devices и используйте команду ports для того, чтобы пересоздать ссылки.

   # /usr/sbin/drvconfig  
   # /usr/sbin/ports     

8) Иногда всё-же бывает необходима полная перезагрузка системы для сброса аппаратуры порта в исходное состояния.


Copyright © 1996 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn. View, CA 94043-1100 USA. All rights reserved.
Перевод: Copyright © 1996 Виталий Филатов (vitaly@royint.com) All Rights Reserved.