ФлеймФорумОбщее

Помогите разобраться со FreeBSD – root не может снять процесс ни по kill, ни по ctrl+C

#0
2:14, 3 авг 2009

Помогите разобраться со FreeBSD – root не может снять процесс ни по kill, ни по ctrl+C.

Система свежая, FreeBSD 7.0, на персоналке с одноядерным процессором. Единственное отличие от установки по умолчанию – терминалы стали русские (cons25r, но сообщения об ошибках английские), и есть установленные Demos Commander (deco) из дистрибутива deco38.tgz и Midnight Commander, но они даже в автозапуске не прописаны.
Вот ссылка на deco38.tgz:
http://rapidshare.de/files/48014947/DECO38.TGZ.html
http://www.rapidshare.ru/1121771

Терминал 1.
login: root
password: (пустой)
#deco
Esc, esc.
“Do you want to quit the Demos Commander ?”
Yes No Exec shell
Выбираю exec shell
Видимо по умолчанию стоит шелл csh, а deco запускает sh.
#ps

  PID  TT  STAT      TIME COMMAND
  745  v0  Is     0:00.05 login [pam] (login)
  753  v0  I      0:00.04 -csh (csh)
  757  v0  S      0:00.03 sh -i
  774  v0  R+     0:00.00 ps
  746  v1  Is+    0:00.01 /usr/libexec/getty Pc ttyv1
  747  v2  Is+    0:00.01 /usr/libexec/getty Pc ttyv2
  748  v3  Is+    0:00.01 /usr/libexec/getty Pc ttyv3
  749  v4  Is+    0:00.01 /usr/libexec/getty Pc ttyv4
  750  v5  Is+    0:00.01 /usr/libexec/getty Pc ttyv5
  751  v6  Is+    0:00.01 /usr/libexec/getty Pc ttyv6
  752  v7  Is+    0:00.01 /usr/libexec/getty Pc ttyv7

#pwd
/root
#mkfifo fif
Далее пример из книжки Робачевского «Операционная система Unix» (2-е издание) с. 25.
#while : ; do date >fif; sleep 5; done&
#ps

  PID  TT  STAT      TIME COMMAND
  745  v0  Is     0:00.05 login [pam] (login)
  753  v0  I      0:00.04 -csh (csh)
  757  v0  S      0:00.03 sh -i
  779  v0  I      0:00.00 sh -i
  780  v0  I      0:00.00 sh -i
  782  v0  R+     0:00.00 ps
  746  v1  Is+    0:00.01 /usr/libexec/getty Pc ttyv1
  747  v2  Is+    0:00.01 /usr/libexec/getty Pc ttyv2
  748  v3  Is+    0:00.01 /usr/libexec/getty Pc ttyv3
  749  v4  Is+    0:00.01 /usr/libexec/getty Pc ttyv4
  750  v5  Is+    0:00.01 /usr/libexec/getty Pc ttyv5
  751  v6  Is+    0:00.01 /usr/libexec/getty Pc ttyv6
  752  v7  Is+    0:00.01 /usr/libexec/getty Pc ttyv7

Это уже странно. Когда тот же пример запускался, не выходя из deco (просто у него в командной строке набирал), 2 создаваемых процесса назывались не sh -i, а по той командной строке (while и пр.), что я набирал. В csh же, что по умолчанию во FreeBSD, вообще при интерпретации строки вылезает ошибка и пример Робачевского в этом шелле попросту не работает.
Продолжаем пример Робачевского
#while : ; do awk ‘{print $4}’ fif; done
Он начинает с интервалом в 5 секунд выводить текущее время.
У Робачевского – «для остановки используйте ^C». Так вот, оно не работает. Появляется ^C на экране, а цифры все идут. Причем, когда все запускалось из-под deco, ^C работало.

Терминал 2.
login: root
password: (пустой)
#ps

  PID  TT  STAT      TIME COMMAND
  745  v0  Is     0:00.05 login [pam] (login)
  753  v0  I      0:00.04 -csh (csh)
  757  v0  S      0:00.07 sh -i
  779  v0  S      0:00.05 sh -i
  948  v0  S      0:00.00 sleep 5
  949  v0  S+     0:00.00 awk {print $4} fif
  746  v1  Is     0:00.04 login [pam] (login)
  923  v1  S      0:00.05 -csh (csh)
  946  v1  R+     0:00.00 ps
  747  v2  Is+    0:00.01 /usr/libexec/getty Pc ttyv2
  748  v3  Is+    0:00.01 /usr/libexec/getty Pc ttyv3
  749  v4  Is+    0:00.01 /usr/libexec/getty Pc ttyv4
  750  v5  Is+    0:00.01 /usr/libexec/getty Pc ttyv5
  751  v6  Is+    0:00.01 /usr/libexec/getty Pc ttyv6
  752  v7  Is+    0:00.01 /usr/libexec/getty Pc ttyv7

У процессов sleep, awk номера все время меняются (что неудивительно).
Пытаемся снять тот процесс, у которого номер не меняется.
#kill 779
Нет ответного сообщения. Даем ps и видим, что... процесс жив!
#ps

  PID  TT  STAT      TIME COMMAND
  745  v0  Is     0:00.05 login [pam] (login)
  753  v0  I      0:00.04 -csh (csh)
  757  v0  S      0:00.08 sh -i
  779  v0  S      0:00.07 sh -i
 1013  v0  S      0:00.00 sleep 5
 1014  v0  S+     0:00.00 awk {print $4} fif
  746  v1  Is     0:00.04 login [pam] (login)
  923  v1  S      0:00.06 -csh (csh)
 1015  v1  R+     0:00.00 ps
  747  v2  Is+    0:00.01 /usr/libexec/getty Pc ttyv2
  748  v3  Is+    0:00.01 /usr/libexec/getty Pc ttyv3
  749  v4  Is+    0:00.01 /usr/libexec/getty Pc ttyv4
  750  v5  Is+    0:00.01 /usr/libexec/getty Pc ttyv5
  751  v6  Is+    0:00.01 /usr/libexec/getty Pc ttyv6
  752  v7  Is+    0:00.01 /usr/libexec/getty Pc ttyv7

Такой же эффект на команду
#kill 757
Помогает только
#shutdown -r now

Если вместо запуска deco набрать просто #sh -i, таких проблем не возникает – процесс, осуществляющий цикл (и его потомки), снимается по первому же ^C.

Что не так?

#1
2:15, 3 авг 2009

kill -9 757

#2
2:23, 3 авг 2009

Таже херня и у меня. Когда в фоновом режиме запускается какая-то команда, которая выполняется в консоли (у тебя вывод в пайп) то в процессах весит баш. Видимо так и надо.

#3
2:24, 3 авг 2009

А почему есть отличие между происходящим после работы в deco и после простого ручного запуска sh -i ? В чем тут отличие ?

#4
2:32, 3 авг 2009

$man bash
-i        If the -i option is present, the shell is interactive.
http://www.faqs.org/docs/bashman/bashref_67.html
6.3.3 Interactive Shell Behavior
Job Control (see section 7. Job Control) is enabled by default. When job control is in effect, Bash ignores the keyboard-generated job control signals SIGTTIN, SIGTTOU, and SIGTSTP.

#5
2:34, 3 авг 2009

Эээ...видимо после этого коммандера ты еще находишься в sh -i. Попробуй suspend или exit. Че там получилось?

#6
2:40, 3 авг 2009

In the absence of any traps, Bash ignores SIGTERM (see section 3.7.6 Signals).

#7
2:06, 5 авг 2009

>$man bash
>-i If the -i option is present, the shell is interactive.
Видишь ли если посмотреть невооруженным глазом, то -i присутствует в обоих случаях (я ведь когда руками ее пускал, а не после Demos, тоже набирал bash -i, и после демоса висело bash -i)
PS: вообще-то какой bash? Там был sh

ФлеймФорумОбщее

Тема в архиве.