Я использую SRM, чтобы удалить один файл. Уже 12 часов SRM работает для удаления файла 7 ГБ, и он имеет только 3 звезды ***
Есть ли способ остановить это или сделать паузу, чтобы я сделал это в другой день.
Я использую SRM, чтобы удалить один файл. Уже 12 часов SRM работает для удаления файла 7 ГБ, и он имеет только 3 звезды ***
Есть ли способ остановить это или сделать паузу, чтобы я сделал это в другой день.
Чтобы уточнить комментарий @ AFH, если "SRM" является консольной программой (интерфейс командной строки), и вы запустили ее из терминала, просто нажмите Ctrl-z
, поскольку это заставляет ваш терминал отправлять процесс переднего плана, которым он управляет, этот SIGSTOP
сигнал и отправить его на задний план. Затем вы можете "вернуть его", выполнив команду оболочки fg
- это часть так называемого "управления заданиями", реализуемого интерактивными оболочками, и означает вывод фонового процесса на передний план (отсюда и "fg"), который включает в себя отправку процесса сигнал SIGCONT
среди прочего.
Конечно, просто остановить процесс, остановить его. В системах Unix-y, включая ОС на базе Linux, это делается путем отправки процессу одного из специальных сигналов - обычно SIGTERM
или SIGINT
. Нажатие Ctrl-c
в терминале, который запускает процесс, отправляет процессу сигнал SIGINT
. Программа kill
может использоваться для отправки произвольных процессов произвольным сигналам.
Проблема с использованием kill
заключается в том, что для большинства его применений требуется, чтобы пользователь знал так называемый "PID" процесса, на который нужно отправить сигнал.
PID - это идентификатор P rocess ID - целое число ≥ 1, уникальное для всех процессов, которыми в настоящее время управляет ОС.
Управление заданиями в оболочке облегчает задачу, так как имеет определенную мнемонику для ссылки на процессы, которыми она управляет: если вы активируете текущий активный процесс, нажимая Ctrl-z
, вы можете использовать команду jobs
чтобы увидеть список процессов, управляемых этой оболочкой. ,
Например, я только что приостановил экземпляр mutt
и запускал jobs
после этого; вот что я вижу:
~$ jobs
[1]+ Stopped mutt
Обратите внимание, что [1]+
бит.
1
- это идентификатор задания, назначенный этому процессу оболочкой.
+
Это "дескриптор" для ссылки на последний фоновый процесс.
Теперь вы можете использовать %1
или %+
с командой kill
для ссылки на этот процесс, как в
$ kill %1
или же
$ kill %+
... и все они отправят SIGTERM
в этот единый процесс.
Вот как вы можете убить неправильно работающую консольную программу.
Подробнее о синглахОбратите внимание, что эти сигналы SIGINT
и SIGTERM
могут быть "обработаны" процессом, который получил один из них.
Это позволяет процессу выполнить определенные действия по очистке перед выходом.
Но иногда процесс может "зависнуть" - скажем, выполняя бесконечный цикл на процессоре из-за программной ошибки или застревая при попытке чтения / записи из / в файл на каком-то "мертвом" ресурсе, таком как отключенный сетевой ресурс.
В этих случаях доставка SIGINT
или SIGTERM
, как правило, не сможет "раскрутить" процесс.
Чтобы справиться с такими случаями, существует специальный сигнал SIGQUIT
, которому назначен известный номер "9".
Отправка процесса этим сигналом просто заставляет операционную систему принудительно обнулять процесс, не имея возможности вмешаться.
Вот почему вы, скорее всего, видели это заклинание kill -9 $pid
в некоторых документах.
Есть и другие варианты, конечно.
Во-первых, существуют «удобные для пользователя» программы, такие как htop
которые предоставляют вам доступный для поиска список запущенных процессов и позволяют вам отправлять любые из них по своему выбору.
Графические среды рабочего стола, такие как GNOME, XFCE, KDE и другие, обычно предоставляют приложение с графическим интерфейсом для того же.
Во-вторых, существуют более "хакерские" способы справиться с неправильным поведением процессов в тех случаях, когда эти "менеджеры задач" недоступны или по какой-то причине не соответствуют требованиям. Вот некоторые из них в произвольном порядке:
При запуске утилита xkill
(в Debian и его производной она находится в пакете x11-utils
) показывает вам диагональный крестообразный курсор, с помощью которого вы должны выбрать любое окно, нажав на него, и xkill
принудительно отключит процесс, который владеет этим окном с X-сервера (программа, которая отображает весь ваш графический интерфейс).
Эффект этого действия отличается между процессами, но если вы xkill
окно терминала, оно отправит сигнал SIGHUP
процессам, которыми он управляет, и это обычно заставляет их выйти.
Утилита pkill
(в Debian и его производной находится в пакете procps
) может быть использована для отправки сигнала ряду процессов, чье имя соответствует определенной строке.
Итак, если вы хотите уничтожить процесс srm
который, как вы знаете, выполняется в вашей системе, вы можете запустить
$ pkill -9 srm
чтобы закрыть все процессы с именем srm
работающие в системе.
Настоящий ответ здесь
TL; DR с современными дисками (включая все, что может вместить 7 ГБ файл), вам не нужно быть таким параноиком.
Так как вам нужно только переписать ваш файл с нулями:
shred -n 0 -z trashed.dat
-n 0
означает 0 проходов со случайными данными (без этого вы получите 3 прохода по умолчанию со случайными данными, но это все еще излишне)-z
один последний проход с нулями (нужен только один)Учитывая это, чтобы эффективно закончить безопасное стирание:
shred
выше(готовясь к внезапному падению кармы ...)