Как запустить приложение Linux в фоновом режиме? - PullRequest
0 голосов
/ 04 июня 2010

Я учусь программировать на платформе ОС Linux и что такое реализация для запуска моего приложения в фоновом режиме.

Как, например, в этом сценарии: при запуске моего приложения в оболочке оно автоматически запускается в фоновом режиме. Обратите внимание, что при запуске приложения мне не нужны символы «&» в оболочке. Какая стандартная функция Linux для этой реализации?

А как я могу убить или завершить приложение, которое было запущено в фоновом режиме в коде? Я имею в виду, что мне не нужно выполнять команду kill shell, чтобы завершить работу моего приложения в фоновом режиме? Или, если приложение удовлетворяет условию, оно убивает себя или завершает работу.

Большое спасибо.

Ответы [ 3 ]

4 голосов
/ 04 июня 2010

Вы хотите демонизировать вашу программу.Обычно это делается с помощью fork() и нескольких других системных вызовов.

Более подробная информация здесь

Фоновые приложения можно убить с помощью kill.Рекомендуется, чтобы демон записывал свой идентификатор процесса (PID) в хорошо известный файл, чтобы его можно было легко найти.

2 голосов
/ 04 июня 2010

Хотя вы должны узнать о fork() exec() wait() и kill(), иногда удобнее просто использовать daemon(3), если он существует.

Предостережения:

  • Нет в POSIX.1-2001
  • Не присутствует во всех BSD (однако может называться как-то иначе)

Если переносимость не является серьезной проблемой, это довольно удобно. Если переносимость является серьезной проблемой, вы всегда можете написать свою собственную реализацию и использовать ее.

С справочной страницы:

SYNOPSIS
       #include <unistd.h>

       int daemon(int nochdir, int noclose);

DESCRIPTION
       The daemon() function is for programs wishing to detach themselves from the
       controlling terminal and run in the background as system daemons.

       If nochdir is zero, daemon() changes the calling process's current working directory
       to the root directory ("/"); otherwise, the current working directory is left 
       unchanged.

       If noclose is zero, daemon() redirects standard input, standard output and standard
       error to /dev/null; otherwise, no changes are made to these file descriptors.
1 голос
/ 04 июня 2010

fork(2) дает вам новый процесс. В дочернем процессе вы запускаете одну из функций exec(3), чтобы заменить ее новым исполняемым файлом. Родитель может использовать одну из функций wait(2), чтобы дождаться завершения дочернего процесса. kill(2) может использоваться для отправки сигнала другому процессу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...