Вбийте фонові процеси, розпочаті за допомогою bash script


1

Я хотів би запустити компілятори CoffeeScript і Sass у фоновому режимі і мати змогу вбити їх обох відразу. У мене є bash-скрипт start, такий:

coffee --watch -o assets/ -c src/ &
sass --watch src:assets &

Після запуску із файлу сценарію вони не відображаються у списку завдань, тому я не можу їх знищити за допомогою:

kill `jobs -p`

як запропоновано в цій публікації. Вони видаються у psвисновку як прикріплені до моїх tty.

Який хороший спосіб вбити процеси, розпочаті моїм startсценарієм?

Моя мета - запустити компілятори ./startі вбити їх за допомогою ./stopсценарію. Я використовую OSX Lion.

Редагувати: Виходячи з відповіді grawity, зараз я використовую:

coffee --watch -o assets/ -c src/ &
coffeepid=$!
sass --watch src:assets
kill $coffeepid

Компілятор Sass скаржиться, що його припиняють kill, тому я зупиняю його з Ctrl-C, а потім вбиваю фоновий компілятор CoffeeScript.


FWIW, натискання Ctrl-C еквівалентно kill -INT.
grawity

Відповіді:


5

Ви використовуєте MacOS X. Система оснащена способом запускати демон-процеси користувача, запускаючи та зупиняючи їх за бажанням. (Власне ім'я для них в MacOS - це користувацькі агенти .) Це такlaunchd , і інтерфейс до нього є launchctl. Зробіть це один раз за сеанс входу (змінивши імена шляхів для ваших компіляторів в абсолютну форму відповідно)

 launchctl submit -l com.example.coffee -- ${BINDIR}/coffee --watch -o assets/ -c src/
 launchctl submit -l com.example.sass -- ${BINDIR}/sass --watch src:assets

І у ваших сценаріях запуску / зупинки:

 launchctl start com.example.coffee
 launchctl start com.example.sass
 launchctl stop com.example.coffee
 launchctl stop com.example.sass

Жодних жахливих файлів, пов'язаних з аваріями . Немає невідповідностей у таблиці процесів. Ніяких мюс. Без суєти.

Звичайно, ви можете отримати творчий вміст зі списком властивостей і додати його у свій Library/LaunchAgentsкаталог, якщо вам подобається - простий файл списку властивостей не важко збити разом. Але launchctl submitчи не існує таких користувальницьких агентів.


Дякую, я забув про запуск. Я подивлюсь на це.
Дуглас

-2

відфільтруйте PID з ps, а потім подайте його для вбивства (в цьому прикладі вбивство ping):

ps -A | grep ping | awk '{print $1}' | xargs kill

1
-1 через дуже ненадійний трубопровід.
grawity

І ще -1, бо це надмірно складно і непрямо.
Кріс Пейдж
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.