#linux #process #command #cpu #kill
#linux #процесс #команда #процессор #убить
Вопрос:
Я использую следующий скрипт, полученный отсюда, для уничтожения процессов с высокой загрузкой процессора:
#!/bin/bash
# tries to kill process with highest CPU load
# (if it is part of a specified list of troublemakers)
TROUBLEMAKERS="java Rscript"
sleep 1 # wait a few seconds (just as a precaution)
TOPPROCESS=$(top -b -n 1 | sed 1,6d | sed -n 2p)
TOPPID=$(echo "$TOPPROCESS" | awk '{print $1}')
TOPNAME=$(echo "$TOPPROCESS" | awk '{print $12}')
if [[ "$TROUBLEMAKERS" == *"$TOPNAME"* ]]
then
echo "Cause of high CPU load: "$TOPNAME" ("$TOPPID")"
echo "In troublemaker list. Killing..."
kill -9 $TOPPID
else
echo "Cause of high CPU load: "$TOPNAME" ("$TOPPID")"
echo "Not in troublemaker list. Exiting..."
exit 1
fi
exit 0
Как видно, TROUBLEMAKERS
содержит список процессов, которые могут вызвать высокую загрузку процессора. Например, если я выполню команду java myfile
, и эта команда загрузит процессор, он будет уничтожен.
Теперь, если я выполню ./anotherfile
, какое имя процесса мне нужно ввести TROUBLEMAKERS
, чтобы команды, содержащие ./
с высокой загрузкой процессора, были завершены?
Ввод TROUBLEMAKERS="java Rscript ./"
не работает.
Комментарии:
1.
./
это не команда, это просто путь к каталогу (tryls -ld ./
) и в основном эквивалентно$PWD/
. Если вы находитесь в/home/me
, то./
ссылается на/home/me
и./anotherfile
ссылается на/home/me/anotherfile
. Люди пишут./file
, потому что это самый короткий способ обратиться к файлу в текущем каталоге, когда вы хотите выполнить определенный файл вместо команды в вашем $PATH .2. @thatotherguy 1 for
./
не является командой
Ответ №1:
вы могли бы попробовать, kill -9 < pid# >
, это обычно убивает процесс независимо от того, какие переменные.
Комментарии:
1. это если я даже отдаленно понимаю вашу ситуацию XD
2. Эта команда уже есть в скрипте. Мне нужен способ получить список pid, которые были запущены,
./
есть ли альтернативный способ запуска скрипта, кроме./myscript
?3. нет, если вы только что не попытались использовать kill 0 для пинга, а затем удалить его после его повторного использования.