Как правильно убить фоновый .sh-скрипт, который продолжает называть что-то еще без & ldquo; убивать себя / rdquo; / убивать все мои процессы?

Я зашел на удаленный сервер (сервер CentOS, я на Ubuntu). Я выполнил следующую команду:

nohup bash script.sh > log.txt &

script.sh содержит, упрощенный, этот контент:

for q (some condition that will trigger about 60 times) do sed (change config file for some other program depending on q) execute some other program (each call of this other program takes about 25 minutes) done

К сожалению, я понял, что в другой программе была небольшая ошибка. Я исправил это без проблем, но у меня возникли проблемы с фактическим убийством этого сценария, поэтому я могу начать его с фиксированной другой программы. Когда я сделал nohup bash script.sh в начале, он вывел число 1946, которое я предполагаю, это pid для script.sh. Я сделал:

pkill 1946

Это остановило ДРУГОЙ ПРОГРАММЕ, что вызовы script.sh (я могу сказать из созданного файла журнала). Но тогда script.sh вызывает следующую итерацию другой программы. Я могу сказать, потому что говорит мне файл журнала, который говорит script.sh, а также другая программа использует мои графические процессоры, которые я могу контролировать с помощью nvidia-smi. Я не вижу script.sh в «top», но вижу, что программа продолжает звонить. Я смог обойти это следующим образом:

while true do sleep 1 pkill (the other program)

Через минуту или около того он убивает все итерации, которые выполнил script.sh. Но это не изящный способ сделать это.

Если я физически находился там, где находится сервер (иногда я это делаю), я делаю следующее в той же ситуации:

pkill -u (me)

Это убивает все, что я делаю. Я просто возвращаюсь и начинаю все, ничего особенного. Это происходит очень часто, когда я отлаживаю другую программу. Но сейчас я вошел в систему с помощью такой команды, как это выполнялось на сервере:

ssh -r (server) (my home)

Итак, если я это сделаю, он убьет мое соединение с сервером. Очевидно, я не хочу этого делать.

Обычно я был бы немного более предприимчивым и пробовал бы все, прежде чем я забегаю сюда, чтобы спросить, но я играю в безопасности. Я не хочу убивать мое ssh-соединение. Как я могу правильно убить script.sh? (Да, я просто попытался сделать «pkill script.sh» или «kill script.sh», он ничего не сделал).

0
задан 6 July 2017 в 00:57

2 ответа

ps -edf | grep script.sh

Убить процессы. Сосредоточьтесь на основном процессе, который сначала порождает остальных. Затем выполните ваш путь обратно через все дочерние процессы.

И затем уничтожьте -9 процессы #

Или

killall script.sh

1
ответ дан 18 July 2018 в 10:40

ps -edf | grep script.sh

Убить процессы. Сосредоточьтесь на основном процессе, который сначала порождает остальных. Затем выполните ваш путь обратно через все дочерние процессы.

И затем уничтожьте -9 процессы #

Или

killall script.sh

1
ответ дан 24 July 2018 в 19:37
  • 1
    К сожалению, это, похоже, не работает. Когда я делаю ps -edf, я получаю этот результат: 505 9374 2065 0 17:54 pts / 1 00:00:00 bash runner.sh runner.sh - мой сценарий. Я пробую pkill 9374, pkill 2065, pkill 505, pkill runner.sh, ничего на самом деле не убивает. – iammax 6 July 2017 в 01:10
  • 2
    Pkill ожидает, что имя и убить ожидает процесс # – washingon 6 July 2017 в 01:54

Другие вопросы по тегам:

Похожие вопросы: