Я использую SRM, чтобы удалить один файл. Уже 12 часов SRM работает для удаления файла 7 ГБ, и он имеет только 3 звезды ***

Есть ли способ остановить это или сделать паузу, чтобы я сделал это в другой день.

2 ответа2

0

Ускоренный курс на уничтожение программ командной строки / текстового режима

Чтобы уточнить комментарий @ 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 работающие в системе.

-1

Настоящий ответ здесь

TL; DR с современными дисками (включая все, что может вместить 7 ГБ файл), вам не нужно быть таким параноиком.

Так как вам нужно только переписать ваш файл с нулями:

shred -n 0 -z trashed.dat
  • где -n 0 означает 0 проходов со случайными данными (без этого вы получите 3 прохода по умолчанию со случайными данными, но это все еще излишне)
  • -z один последний проход с нулями (нужен только один)

Учитывая это, чтобы эффективно закончить безопасное стирание:

  1. остановить текущую команду
  2. запустите команду shred выше

(готовясь к внезапному падению кармы ...)

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