Запуск процесу Linux у фоновому режимі


10

Я намагаюся створити сценарій, який запускає деякі програми

startup.sh

knetworkmanager
emesene
keepassx

Проблема полягає в тому, що коли я запускаю скрипт, він запускає лише knetworkmanager. Це тому, що воно запуститься, а потім дочекайтеся його закінчення. Як я можу запустити програму, не чекаючи її? Я не думаю, що я можу просто додати "&" після кожної команди, тому що всі процеси все одно будуть вбиті, коли сценарій буде закінчений.

Відповіді:


15

Коли оболонка, що виконує сценарій, закривається, вона надсилає сигнал HUP процесам, які ви розпочали. Якщо ті не вловлюють сигнал, вони припиняються. Тож чи достатньо лише використання & залежить від програми. Щоб бути безпечним, використовуйте nohup так:

nohup your-program >>/dev/null 2>>/dev/null &

Перегляньте сторінки чоловіка для nohup і убийте для отримання більш детальної інформації або прочитайте статтю wikipedia про nohup .


Читаючи ще раз, неоднозначно, буде OP виходити з оболонки виклику чи ні. Він згадує лише вихід сценарію, а не вихід із оболонки чи терміналу.
Адам Беллер

прочитавши мою відповідь ще раз, ви помітите, що я сказав "коли оболонка, що запускає сценарій, закривається". Якщо припустити, що у цієї оболонки є власний віртуальний термінал (а не підкабель чи щось таке), це правильно.
Кім

@Kim: Це правда. Ваша відповідь чудова, я просто впевнений, закриває ОП оболонка виклику чи ні.
Адам Беллер

10

Ні, процеси не повинні вбиватися, коли сценарій закінчується, якщо ви використовуєте &. Спробуй це.

knetworkmanager &
emesene &
keepassx &

2

На основі прикладу програм, які ви подали, схоже, ви намагаєтеся запустити деякі програми при запуску KDE. Якщо так, подивіться функцію автозапуску KDE. У цій статті детальніше йдеться про інструкції щодо додавання програм до автозапуску.


Дійсно, саме це я намагаюся зробити. Я виправив це зараз, дякую.
Барт ван Хекелом

1

Як говорили інші, використовуйте &оператор, щоб поставити команду на задній план під час запуску оболонки.

Якщо ви хочете, щоб складові частини працювали в порядку (а не концентровано), але все ж хочете, щоб ціле було фоновим фоном, використовуйте подібну оболонку:

(knetworkmanager; emesene; keepassx) &

або, якщо ви хочете, щоб робота кожної деталі була обумовлена ​​успішним завершенням використання попередньої частини:

(knetworkmanager && emesene && keepassx) &

0

Додавання "&" після кожної команди обов'язково спрацює. Це означає, що ці сценарії чи програми продовжуватимуться працювати навіть після завершення startup.sh.


0

Іншим варіантом було б запустити процес як демон, використовуючи / sbin / start-stop-демон

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