#include
#include int main(void)
{
int fd;
// создаем новый процесс и закрываем родительский
if (fork()!=0) return 0;
printf("Start daemon\n");
// закрываем все открытые файлы, в том числе и дескрипторы
// ввода-вывода (они передаются процессу системой)
for (fd=0;fd // делаем процесс главным в группе процессов
setsid(); // здесь можно например открыть пассивное TCPIP подключение,
// т.е. запустить некий сервер.....
// имитируем напряженную работу
while(1) sleep(100);
return 0;
}
компилируем программу:
gcc my_daemon.c -o my_daemon
запускаем ...
если теперь посмотреть на процессы - команда ps -Al, то увидим что процесс my_daemon:
1. Не имеет терминала (столбец tty), соответственно и не имеет потоков ввода-вывода.
2. Идентификатор родительского процесса равен 1, хотя на самом деле мы запускали его с терминала (процесс №??).
При запуске программы через терминал, система передает программе дескрипторы стандартного вводы/вывода, которые используются для функций printf, scanf.