fork.c
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
static void child()
{
printf("Child. pid: %d.\n", getpid());
exit(EXIT_SUCCESS);
}
static void parent(pid_t pid_child)
{
printf("Parent. parent's pid: %d. child's pid: %d\n", getpid(), pid_child);
exit(EXIT_SUCCESS);
}
int main()
{
pid_t pid;
pid = fork();
if(pid == -1) err(EXIT_FAILURE, "fork() failed");
//Der untergeordnete Prozess hat den Rückgabewert 0
if(pid == 0)
child();
//Die Prozess-ID des untergeordneten Prozesses, dessen Rückgabewert der übergeordnete Prozess ist(> 0)
else
parent(pid);
}
Parent. parent's pid: 27701. child's pid: 27702
Child. pid: 27702.
Sie können sehen, dass untergeordnete Prozesse aus dem übergeordneten Prozess erzeugt werden und jeder eine andere Prozess-ID hat
execve.c
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
static void child()
{
char *args[] = {"/bin/echo", "Hallo", NULL};
printf("child. child's pid: %d.\n", getpid());
execve("/bin/echo", args, NULL);
err(EXIT_FAILURE, "execve() failed");
}
static void parent(pid_t pid_child)
{
printf("parent. parent's pid: %d. child's pid: %d\n", getpid(), pid_child);
exit(EXIT_SUCCESS);
}
int main(void)
{
pid_t pid;
pid = fork();
if(pid == -1)
err(EXIT_FAILURE, "fork() failed");
if(pid == 0)
child();
else
parent(pid);
}
parent. parent's pid: 28034. child's pid: 28035
child. child's pid: 28035.
Hallo
Nachdem der Prozess mit der Funktion fork () verzweigt ist, können Sie sehen, dass / bin / echo von der Funktion execve () im untergeordneten Prozess ausgeführt wird.
Recommended Posts