Ich habe einen Daemon-Prozess, wo ich fork()/exec() einige neue Prozesse und lesen Sie dann die untergeordneten Prozesse stdout/stderr.Lesen von stdout/stderr aus einem exec() 'ed-Prozess in einem Daemon
Mein Problem ist, dass der Eltern ein Daemon ist, wo Stdout und Stderr geschlossen sind. Gibt es das überhaupt, um das zu tun? Muss ich eine Shell öffnen?
int status;
pipe(pipefd_stdout);
pipe(pipefd_stderr);
pid_t pid = fork();
if (pid == 0)
{
close(pipefd_stdout[0]); // close reading end in the child
close(pipefd_stderr[0]); // close reading end in the child
dup2(pipefd_stdout[1], 1); // send stdout to the pipe
dup2(pipefd_stderr[1], 2); // send stderr to the pipe
execvpe(cmd, (char**)args, (char**)env);
}
else
{
// parent ...
waitpid(pid, &status, 0);
close(pipefd_stderr[1]);
close(pipefd_stdout[1]);
}
_ "Muss ich eine Shell öffnen?" _ Nein, bauen Sie stattdessen eine Pipe. –
Ich habe ähnliches Problem. Leider kann ich Pipe nicht wie vorgeschlagen verwenden, da ich 'system()' Funktion verwende. Wird "stdout" in eine temporäre Datei umgelenkt? –