Я выполнял некоторые процессы под экранной сессией на удаленном сервере. Когда я пытался уничтожить все те процессы:
pkill -U tim
все мои процессы уничтожаются включая тех, которых я не хочу уничтожать (т.е. экран и соединение SSH).
Существует ли способ уничтожить все мои процессы кроме экрана и соединение SSH?
Вид hackerish:
ps -U tim | egrep -v "ssh|screen" | cut -b11-15 | xargs -t kill
это уничтожит все кроме любого ssh или экранирует процессы. Вот команды, объяснил:
ps -U tim
- будет, очевидно, перечислять каждый процесс от пользователя timegrep -v "ssh|screen"
- удалит строки с ssh или экранирует процессыcut -b11-15
- сократит данные в столбцах 11-15 (обычно, это - то, где PID расположенxargs -t kill
- передаст весь идентификатор процесса команде уничтоженияМожно также использовать awk, если Вы больше привыкли к этому.
ps -U tim | egrep -v "ssh|screen" | awk '{print $2}' | xargs -t kill
При уничтожении всего procs много Вы могли бы хотеть заняться расследованиями, почему необходимо сделать это..., но эй, это - все о выполнении вещей, не о не выполнении вещей.
Одно легкое решение состояло бы в том, чтобы использовать два идентификаторов пользователей... один для экрана и Вашего соединения SSH и другого для всех процессов, которые Вы в какой-то момент захотите избавиться.
Это вне "hackerish" и в просто "взлом", но он имеет добавленное преимущество, в котором ЛЮБЫЕ ДРУГИЕ программы Вы работаете, поскольку пользователь "подключения" не будет уничтожен, когда Вы уничтожите другой procs. Это могло включать "хвосты" журналов ошибок и подобных вещей, которые Вы могли бы ХОТЕТЬ разбросать.
Надеюсь, это поможет!
Ничто созданное в этом я знаю. Вы могли создать сценарий как это:
#!/bin/bash
ps ux | sed -e '/bash/d' -e '/screen/d' | awk '{print $2}' | while read process
do
kill $process
done
Если бы были какие-либо другие процессы, Вы не хотели уничтожать Вас, должен был бы просто добавить больше
-e '/processname/d'
записи в sed часть. Существует, вероятно, более чистый способ обработать его, но это будет работать.