Я этот сценарий, который должен начать Keep-Alive сценарий и Sublime Text 3 под Bash для Windows:убить фоновый процесс на SIGINT
#!/bin/dash
set -e
# Keep alive (in background)
tail -f /dev/null &
pid=$!
echo "tail process id: ${pid}"
echo "Keep-alive process started with Sublime Text 3\nPress SIGINT (CTRL+C) to kill it..."
# Start Sublime Text 3
DISPLAY=localhost:0 /usr/bin/sublime
# http://stackoverflow.com/a/19274804/1442219
trap "kill ${pid}; exit 1" INT
wait
Этот код генерирует:
tail process id: 49
Keep-alive process started with Sublime Text 3
Press SIGINT (CTRL+C) to kill it...
tail: cannot determine location of '/dev/null'. reverting to polling: Invalid argument
Все цель этого скрипта, что я запускаю Sublime Text 3 с графическим интерфейсом с сервером Xorg под Bash для Windows. Я пытаюсь сделать ярлык для запуска этого сценария с "C:\Windows\System32\bash.exe" -c "./my-script.sh"
команды и Bash для Windows, должно работать в фоновом режиме, когда я использую ST3, так как в противном случае есть dbus
ошибки (даже если вы изменили /etc/dbus-1/session.conf
)
Проблемы: если Я нажимаю CTRL+C
, tail
Процесс все еще отображается в фоновом режиме.
Edit:
Я изменил порядок в сценарии, металлообрабатывающая tail
и wait
под всем.
Решено:
Похоже dash
не поддерживает SIGINT
или INT
. Решение должно использовать bash
, а SIGINT
будет работать так, как должно.
Дэш не Баш. – 123
Возможный дубликат [Как убить фоновые процессы/задания при выходе моего сценария оболочки?] (Http://stackoverflow.com/questions/360201/how-do-i-kill-background-processes-jobs-when-my -shell-script-exits) – jww
Ваша команда 'wait' заставляет сценарий приостанавливаться и ждать завершения всех фоновых заданий. Поэтому ваша команда 'tail' должна завершиться до запуска команды' sublime'. Это ваше намерение? Что касается проблемы с 'tail', возможно, вы могли бы попробовать использовать' sleep' с очень большой продолжительностью? – Fred