Помогите разобраться со FreeBSD – root не может снять процесс ни по kill, ни по ctrl+C
Помогите разобраться со 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 [code] 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 [/code] #pwd /root #mkfifo fif Далее пример из книжки Робачевского «Операционная система Unix» (2-е издание) с. 25. #while : ; do date >fif; sleep 5; done& #ps [code] 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 [/code] Это уже странно. Когда тот же пример запускался, не выходя из deco (просто у него в командной строке набирал), 2 создаваемых процесса назывались не sh -i, а по той командной строке (while и пр.), что я набирал. В csh же, что по умолчанию во FreeBSD, вообще при интерпретации строки вылезает ошибка и пример Робачевского в этом шелле попросту не работает. Продолжаем пример Робачевского #while : ; do awk ‘{print $4}’ fif; done Он начинает с интервалом в 5 секунд выводить текущее время. У Робачевского – «для остановки используйте ^C». Так вот, оно не работает. Появляется ^C на экране, а цифры все идут. Причем, когда все запускалось из-под deco, ^C работало.
Терминал 2. login: root password: (пустой) #ps [code] 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 [/code] У процессов sleep, awk номера все время меняются (что неудивительно). Пытаемся снять тот процесс, у которого номер не меняется. #kill 779 Нет ответного сообщения. Даем ps и видим, что... процесс жив! #ps [code] 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 [/code] Такой же эффект на команду #kill 757 Помогает только #shutdown -r now
Если вместо запуска deco набрать просто #sh -i, таких проблем не возникает – процесс, осуществляющий цикл (и его потомки), снимается по первому же ^C.
Что не так?