У мене є живий компакт-диск, який завантажується в Linux і запускає невеликий сценарій Bash. Сценарій шукає та запускає другу програму (яка зазвичай є компільованою двійковою C ++).
Ви повинні мати можливість перервати другу програму, натиснувши Ctrl+ C. Що має статися, це те, що друга програма зупиняється, а сценарій Bash продовжує виконувати очищення. Що на насправді відбувається те , що і основне додаток і Bash скрипт завершується. Яка проблема.
Тому я використовував trap
вбудований, щоб сказати Bash ігнорувати SIGINT. І тепер Ctrl+ Cприпиняє додаток C ++, але Bash продовжує свою роботу. Чудово.
О так ... Іноді "другий додаток" - це ще один сценарій Баша. І в цьому випадку Ctrl+ Cзараз нічого не робить .
Ясно, що моє розуміння того, як працює цей матеріал, неправильне ... Як я можу контролювати, який процес отримує SIGINT, коли користувач натискає Ctrl+ C? Я хочу направити цей сигнал лише на один конкретний процес .
set -m
. Це трохи чистіше і простіше, ніж використовуватиsetsid
кожен раз, коли ви запускаєте дитину.