Ловить process.kill в bash? - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь запустить bash-скрипт через класс процесса и что-то сделать, когда я использую process.kil () Но похоже, что сигнал выхода не сработал так:

A. Возможно ли это?

B. Если это невозможно, есть ли способ отправить сигнал процессу?

Script.sh

#!/bin/bash
Exit(){
echo "terminated">>log.txt
kill $child}
trap Exit EXIT
 daemon &
child=$!
echo $child > log.txt
wait $child

C # код:

Process script = new Process()
script.StartInfo.Filename = "Script.sh"
script.Start()
//Other stuff
script.Kill()

C # script.Kill, похоже, не вызывает Exit () в Script.sh

Выход через системный монитор Ubuntu. хотя и вызывает его.

Edit:

Изменение сигнала на SIGTERM не изменило результаты.

1 Ответ

0 голосов
/ 26 июня 2018

Нет такого сигнала EXIT в UNIX / Linux. SIGTERM - самый близкий к тому, что вы хотите, и сигнал по умолчанию, используемый kill.

Однако bash имеет псевдосигнал, называемый EXIT. Это описано в Руководстве по Bash - Встроенные оболочки Bourne - ловушка , в которой вы, возможно, запутались.

Если sigspec равен 0 или EXIT, arg выполняется при выходе из оболочки. Если sigspec равен DEBUG, команда arg выполняется перед каждой простой командой, для команды, команды case, команды select, каждой арифметики для команды, и перед выполнением первой команды в функции оболочки. Обратитесь к описанию опции extdebug встроенной функции shopt (см. The Shopt Builtin) для подробностей о ее влиянии на ловушку DEBUG. Если sigspec равен RETURN, команда arg выполняется каждый раз, когда выполняется функция оболочки или сценарий с помощью. или встроенные источники заканчивают выполнение

Если вы намеревались использовать это, то вы должны начать свой скрипт со строки:

#!/bin/bash

чтобы убедиться, что он запускается под оболочкой bash.

См. http://man7.org/linux/man-pages/man7/signal.7.html для получения списка всех сигналов в Linux.

...