Я хочу порождать интерактивный процесс от демона. Как я могу этого достичь? Я пробовал следующий фрагмент кода:
int main (int argc, char *argv[])
{
if (fork()) exit (EXIT_FAILURE) ;
freopen("/dev/null","w",stderr) ;
freopen("/dev/null","r",stdin) ;
freopen("/dev/null","w",stdout) ;
/*
*/
if (fork()) exit (EXIT_FAILURE) ;
pid_t shell_pgrp = getpgrp () ;
pid_t my_pid = getpid () ;
int shell_tty = isatty (fileno(stderr)) ?
dup (fileno(stderr)) : open (ctermid(NULL), O_RDWR|O_NONBLOCK) ;
shell_tty = fcntl (shell_tty,F_DUPFD,10) ;
fcntl (shell_tty,F_SETFD,FD_CLOEXEC) ;
if (shell_tty < 0) exit (EXIT_FAILURE) ;
if ((shell_pgrp = tcgetpgrp (shell_tty)) != getpgrp()) {
setpgid (my_pid,shell_pgrp) ;
}
if (shell_pgrp < 0) exit (EXIT_FAILURE) ;
if ((shell_pgrp = tcgetpgrp (shell_tty)) == getpgrp()) {
signal (SIGTTIN,SIG_IGN) ;
signal (SIGTTOU,SIG_IGN) ;
signal (SIGTSTP,SIG_IGN) ;
signal (SIGHUP ,SIG_IGN) ;
signal (SIGQUIT,SIG_IGN) ;
signal (SIGQUIT,SIG_IGN) ;
if (!tcsetpgrp (shell_tty,shell_pgrp)) {
argv++ ;
if (execv(argv[0],argv) < 0) {
exit (EXIT_FAILURE) ;
}
}
}
}