Процессы не отвечают на мои сигналы

ОТРЕДАКТИРОВАННЫЙ: забыл удваиваться, выходят из \r в sed строка

любой из них должен работать на Вас

for i in $(find . -type d -name '*\r'); do mv "$i" "$(echo $i | sed -e 's/\\r//g')"; done

find . -type d -name '*\r' -exec mv "{}" "$(echo {} | sed -e 's/\\r//g')" \;

это найдет все каталоги названными * $\\r под Вашим в настоящее время каталог

это будет затем mv(переименуйте) их к тому же имени минус \r

5
17.01.2014, 22:16
2 ответа

Последние версии Nvidia, собственные драйверы (возможно объединенный с другими последними версиями библиотек) имеют ошибку, которая заставляет их повреждать маску сигнала.

Можно посмотреть на маски сигнала как это:

anthony@Zia:~$ ps -eo blocked,pid,cmd | egrep -v '^0+ '
         BLOCKED   PID CMD
fffffffe7ffbfeff   605 udevd --daemon
0000000000000002  4052 /usr/lib/policykit-1/polkitd --no-debug
0000000000087007  4646 /usr/sbin/mysqld --basedir=/usr […]
0000000000010000 15508 bash

Это о том, на что это должно быть похожим. При выполнении этого в системе с собственными драйверами Nvidia Вы будете видеть все виды сумасшедших значений для BLOCKED, для многих Ваших программ — включая, вероятно, все неправильно себя ведущие.

Обратите внимание, что маски сигнала передаются от родителя до ребенка через fork/exec, таким образом, после того как родительский процесс имеет поврежденный, все дети, которых он порождает от той точки вперед, будут, также.

См. также мой вопрос После того, как обновление, X кнопок в строке заголовка больше не закрывают xterm и различные ошибки дистрибутива, которые Вы сможете найти теперь, зная который пакет посмотреть на. Можно изменить код в моем ответе на тот вопрос сбросить маску сигнала ни к одному заблокированному (Игнорировать sigaddset и изменение SIG_UNBLOCK кому: SIG_SETMASK).

6
27.01.2020, 20:38

Я думаю, что это - желаемое поведение от top: это выходит только на команде "q" с клавиатуры.

Код top вероятно, установки сигнализируют о функциях ловца, любом с a signal() системный вызов или a sigaction() системный вызов. Мое предположение было бы этим когда top периодически обновляет экран, он получил сигнал, возможный от alarm() системный вызов или что-то как этот.

Вы уверены это cat не выходит на Ctrl-C или управлении-\? Обе из тех ключевых хорд обычно генерируют SIGINT и SIGQUIT соответственно. cat казалось бы, не извлек бы выгоду из восстановления ни с одного из тех двух сигналов.

Одним способом проверить, что думает Ваш tty драйвер, являются ключевые хорды для SIGINT и SIGQUIT:

stty -a

На моей машине это говорит что-то как:

speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

"Предают земле =, ^C" и "выходят =, ^\\" средний "Отправляют SIGINT в текущий приоритетный процесс на Ctrl-C", и "Отправляют SIGQUIT в текущий приоритетный процесс на обратной косой черте Управления". Те два становились измененными так или иначе?

Вам можно было бы установить Вашу оболочку для захвата сигналов. В zsh и ударе, команде:

trap "" INT

сохраняет Ctrl-C (в том же xterm) от уничтожения последующего вызова cat. Но то "прерывание" не сохраняет a kill -QUIT от порождения cat обработайте для выхода. Тем не менее, необходимо проверить удар или zsh или файлы точки ksh для trap "" INT вызовы.

Вы не упоминаете, какая версия ядра, какой дистрибутив и что окружает, Вы используете. Упоминание о тех вещах могло бы получить Вас лучший ответ.

0
27.01.2020, 20:38
  • 1
    Спасибо за Ваш ответ. cat и top просто примеры. все процессы делают то же поведение. я пытался записать простую программу для сна только (без обработчика сигналов), и у меня было то же поведение. –  Maxwell S. 17.01.2014, 01:26
  • 2
    @MaxwellS. - посмотрите редактирования. Возможно, Ваши keyboard/tty настройки испорчены. –  Bruce Ediger 17.01.2014, 01:34
  • 3
    я думаю tty драйвер, хорошо intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; обратите внимание на то, что я также вызвал kill программа для отправки сигналов –  Maxwell S. 17.01.2014, 01:41

Теги

Похожие вопросы