Как сделать процесс & ldquo; terminable & rdquo; только SIGHUP или SIGKILL?

Я написал сценарий, который должен убить застрявшие процессы. Сначала он пробует самый слабый SIGTERM, если он не работает, он пытается SIGHUP, и если даже это не поможет, он сделает SIGKILL. Теперь я хочу попробовать, если этот скрипт работает практически.

Как я могу заставить процесс застревать или заклинивать, поэтому его можно остановить только с помощью сигнала HUP или KILL?

0
задан 25 June 2017 в 02:31

3 ответа

Вероятно, самым простым способом было бы написать минимальный сценарий bash, используя встроенный trap, чтобы указать пользовательский обработчик сигнала:

#!/bin/bash

function mysighandler {
  printf 'ignoring TERM signal\n'
}

trap mysighandler SIGTERM

while :
do
  printf 'Running. . .\n'
  sleep 2
done

Вы можете установить обработчик на нулевую строку, которая приведет к тому, что сигнал будет игнорироваться молча - но создание минимального обработчика позволяет подтвердить, что оно было перехвачено.

В качестве альтернативы напишите небольшую программу на C, которая использует API signal - см. man 2 signal.

1
ответ дан 22 May 2018 в 21:11

Вероятно, самым простым способом было бы написать минимальный сценарий bash, используя встроенный trap, чтобы указать пользовательский обработчик сигнала:

#!/bin/bash function mysighandler { printf 'ignoring TERM signal\n' } trap mysighandler SIGTERM while : do printf 'Running. . .\n' sleep 2 done

Вы можете установить обработчик на нулевую строку, которая приведет к тому, что сигнал будет игнорироваться молча - но создание минимального обработчика позволяет подтвердить, что оно было перехвачено.

В качестве альтернативы напишите небольшую программу на C, которая использует API signal - см. man 2 signal.

1
ответ дан 18 July 2018 в 11:08

Вероятно, самым простым способом было бы написать минимальный сценарий bash, используя встроенный trap, чтобы указать пользовательский обработчик сигнала:

#!/bin/bash function mysighandler { printf 'ignoring TERM signal\n' } trap mysighandler SIGTERM while : do printf 'Running. . .\n' sleep 2 done

Вы можете установить обработчик на нулевую строку, которая приведет к тому, что сигнал будет игнорироваться молча - но создание минимального обработчика позволяет подтвердить, что оно было перехвачено.

В качестве альтернативы напишите небольшую программу на C, которая использует API signal - см. man 2 signal.

1
ответ дан 24 July 2018 в 19:44

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

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