Estoy tratando de hacer algo un poco raro aquí. Necesito comenzar un proceso, logcat, desde un demonio que se ejecutará en segundo plano e imprimirá en la terminal sin tomar el control de stdin. Es para el registro, idealmente logcat imprimirá mensajes de registro mientras permite al usuario ingresar comandos estándar e inicializar programas desde el shell. Aquí está el código para el daemon que tengo hasta ahora. El programa, logcat, se inicia y muestra los mensajes de registro pero no puedo ingresar ningún comando en stdin ya que parece que el programa tomó el control de stdin.Inicie un proceso en segundo plano en 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;
}
Gracias
Muchas gracias por su gran respuesta en profundidad. El problema fue el stdin como lo habías mencionado. Tuve que redireccionar de logcat a stdin, junto con algunas otras cosas como demonizar el proceso. Esto me ha ahorrado tanto estrés y preocupación. Gracias de nuevo, realmente lo aprecio. – Mike