#include <stdio.h>
#include <unistd.h> // for fork(), getpid(), getppid()
#include <sys/wait.h> // for wait()
#include <stdlib.h> // for exit()
int main() {
pid_t pid;
// Create a child process
pid = fork();
if (pid < 0) {
// fork() failed
}
else if (pid == 0) {
// Child process
printf(" PID: %d\n", getpid
()); printf(" Parent PID: %d\n", getppid
()); }
else {
// Parent process
printf(" PID: %d\n", getpid
()); printf(" Parent PID: %d\n", getppid
());
// Parent waits for child to finish
wait(NULL);
printf("Child process (PID: %d) finished. Parent terminating.\n", pid
); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx1bmlzdGQuaD4gICAvLyBmb3IgZm9yaygpLCBnZXRwaWQoKSwgZ2V0cHBpZCgpCiNpbmNsdWRlIDxzeXMvd2FpdC5oPiAvLyBmb3Igd2FpdCgpCiNpbmNsdWRlIDxzdGRsaWIuaD4gICAvLyBmb3IgZXhpdCgpCgppbnQgbWFpbigpIHsKICAgIHBpZF90IHBpZDsKCiAgICAvLyBDcmVhdGUgYSBjaGlsZCBwcm9jZXNzCiAgICBwaWQgPSBmb3JrKCk7CgogICAgaWYgKHBpZCA8IDApIHsKICAgICAgICAvLyBmb3JrKCkgZmFpbGVkCiAgICAgICAgcGVycm9yKCJmb3JrIGZhaWxlZCIpOwogICAgICAgIGV4aXQoMSk7CiAgICB9IAogICAgZWxzZSBpZiAocGlkID09IDApIHsKICAgICAgICAvLyBDaGlsZCBwcm9jZXNzCiAgICAgICAgcHJpbnRmKCJDaGlsZCBQcm9jZXNzOlxuIik7CiAgICAgICAgcHJpbnRmKCIgIFBJRDogJWRcbiIsIGdldHBpZCgpKTsKICAgICAgICBwcmludGYoIiAgUGFyZW50IFBJRDogJWRcbiIsIGdldHBwaWQoKSk7CiAgICB9IAogICAgZWxzZSB7CiAgICAgICAgLy8gUGFyZW50IHByb2Nlc3MKICAgICAgICBwcmludGYoIlBhcmVudCBQcm9jZXNzOlxuIik7CiAgICAgICAgcHJpbnRmKCIgIFBJRDogJWRcbiIsIGdldHBpZCgpKTsKICAgICAgICBwcmludGYoIiAgUGFyZW50IFBJRDogJWRcbiIsIGdldHBwaWQoKSk7CgogICAgICAgIC8vIFBhcmVudCB3YWl0cyBmb3IgY2hpbGQgdG8gZmluaXNoCiAgICAgICAgd2FpdChOVUxMKTsKICAgICAgICBwcmludGYoIkNoaWxkIHByb2Nlc3MgKFBJRDogJWQpIGZpbmlzaGVkLiBQYXJlbnQgdGVybWluYXRpbmcuXG4iLCBwaWQpOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==