Sto cercando di fare qualcosa di strano qui. Ho bisogno di avviare un processo, logcat, da un demone che verrà eseguito in background e stampare sul terminale senza prendere il controllo di stdin. È per la registrazione che idealmente logcat stamperà i messaggi di registro pur consentendo all'utente di immettere comandi standard e inizializzare i programmi dalla shell. Ecco il codice per il demone che ho finora. Il programma, logcat, avvia e mostra i messaggi di log ma non posso inserire alcun comando in stdin poiché sembra che il programma abbia preso il controllo di stdin.Avvia un processo in background in Linux con C
int main (int argc, char** argv, char** env)
{
int fd;
if ((fd = open("/dev/console", O_RDWR)) < 0) {
fd = open("/dev/null", O_RDWR);
}
printf("THIS IS A TEST\n");
dup2(1, fd);
dup2(2, fd);
pid_t childpid = fork();
if(childpid == -1) {
perror("Failed to fork, logcat not starting");
return 1;
}
if(childpid == 0) {
//this is the child, exec logcat
setsid();
int execReturn = execl("/system/bin/logcat", "logcat", (char *) 0);
} else {
//this is the parent do nothing
close(fd);
return 0;
}
close(fd);
return 0;
}
Grazie
Grazie mille per la tua profonda risposta. Il problema era lo stdin come lei aveva menzionato. Ho dovuto reindirizzare da logcat a stdin, insieme ad altre cose come il demonizzare il processo. Questo mi ha risparmiato tanto stress e preoccupazione. Grazie ancora, lo apprezzo davvero. – Mike