4

Была введена следующая команда:

sleep 12h; nuke-russia

Это было введено на одном из tty s Debian. Я хотел бы отменить сон, ничего не сбрасывая. Я не хочу, чтобы команда nuke запускалась хоть на один момент. У меня есть другие пять доступных терминалов. Что я могу сделать?

5 ответов5

2
  1. Найти nuke-russia
  2. Переименовать его в old-nuke-russia
  3. Создайте ссылку в том же каталоге на ls именем, хм ..., nuke-russia .

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

1

По-видимому

kill -s SIGHUP [pid]

Должен полностью убить этот терминальный сеанс и эффективно повесить этот сеанс.

Как и в случае с другими ответами, команда ps -ef | grep sleep должен получить вам pid который нужно отправить сигнал.

- = EDIT = -

Флаг kill -s сообщает команде, что я хочу указать используемый сигнал, в моем случае SIGHUP.

Чтобы уточнить, почему я решил предложить kill -s SIGHUP [pid] (или ppid как предложено peth), я заручусь поддержкой Википедии, в которой говорится:

На POSIX-совместимых платформах SIGHUP - это сигнал, отправляемый процессу, когда его управляющий терминал закрыт. (Первоначально он был разработан, чтобы уведомить процесс сброса последовательной линии). SIGHUP является символической константой, определенной в заголовочном файле signal.h.

...

С отказом доступа через последовательную линию значение SIGHUP несколько изменилось в современных системах, что часто означает, что управляющий псевдо или виртуальный терминал был закрыт.

Я обнаружил большое количество программ, которые после того, как их терминал будет уничтожен, сами полностью прекратят работу, и я считаю, что оболочка bash (при выполнении команды sleep) в этом случае ничем не отличается.

0

В будущем попробуйте использовать && вместо ;
sleep X && echo bla нажатием Ctrl + C остановит сон и не эхо бла

Если это возможно, вы можете переименовать ответственный бинарный файл. Таким образом, bash не сможет nuke-russia поскольку она не будет существовать.

Другое решение было бы убить ответственную оболочку

РЕДАКТИРОВАТЬ:
Как найти PID ответственной оболочки (которая должна быть ее родителем)
Если пид sleep 12h 1234
найти ответственную оболочку с ps -o ppid= 1234
Тогда убей это с помощью kill -9

-1

Аналогичный ответ на Linker3000: войдите в систему как root с другого терминала и завершите процесс tty (в CentOS процесс называется login, не уверен насчет Debian).

-3

Войдите в систему как пользователь root на другом терминале.

Найдите скрипт (или команду) nuke-russia и переименуйте его в другое, затем ...

[root@mysvr ~]# ps -ef | grep sleep
root      1362  1338  0 17:23 pts/0    00:00:00 sleep 12h
root      1393  1367  0 17:24 pts/1    00:00:00 grep sleep

Выберите правильную команду сна из списка (если их больше одного) и запишите ее номер PID - в моем случае это 1362

введите команду: kill -9 [PID] например: kill -9 1362

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .