Im übergeordneten Prozess möchten Sie fork
.
Fork erstellt einen vollständig neuen Prozess und gibt entweder den untergeordneten Prozess pid
an den aufrufenden Prozess und 0
an den neuen untergeordneten Prozess zurück.
Im untergeordneten Prozess können Sie dann etwas wie execl
verwenden, um Ihr gewünschtes sekundäres Programm auszuführen. Im übergeordneten Prozess können Sie waitpid
verwenden, um auf den Abschluss des untergeordneten Prozesses zu warten.
Hier ist ein einfaches illustratives Beispiel:
#include <iostream>
#include <sys/wait.h>
#include <unistd.h>
#include <cstdio>
#include <cstdlib>
int main()
{
std::string cmd = "/bin/ls"; // secondary program you want to run
pid_t pid = fork(); // create child process
int status;
switch (pid)
{
case -1: // error
perror("fork");
exit(1);
case 0: // child process
execl(cmd.c_str(), 0, 0); // run the command
perror("execl"); // execl doesn't return unless there is a problem
exit(1);
default: // parent process, pid now contains the child pid
while (-1 == waitpid(pid, &status, 0)); // wait for child to complete
if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
{
// handle error
std::cerr << "process " << cmd << " (pid=" << pid << ") failed" << std::endl;
}
break;
}
return 0;
}
Ich bin der Folge Fehler bekommen, wenn eine Gabel zu tun versuchen(), wenn ich einen fork() tun, ist es mir ein Fatal IO Fehler geben 11 (Resource vorübergehend nicht verfügbar) auf X, manchmal seine (Erfolg) oder (keine solche Datei oder Verzeichnis) – user1265478
Lesen Sie http://advancedlinuxprogramming.com/ –