#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
int main( ) {
pid_t pid, wpid;
int status;
printf ( "Parent process started (PID: %d)\n " , getpid
( ) ) ;
// Create a child process using fork()
pid = fork( ) ;
if ( pid < 0 ) {
// fork failed
} else if ( pid == 0 ) {
// Child process
printf ( "Child process (PID: %d), parent PID: %d\n " , getpid
( ) , getppid
( ) ) ;
// Replace the child process with a new program using execl
printf ( "Child process will now execute 'ls -l' command\n " ) ; execl( "/bin/ls" , "ls" , "-l" , NULL) ;
// If execl returns, it means it failed
} else {
// Parent process
printf ( "Parent process waiting for child (PID: %d) to complete\n " , pid
) ;
// Wait for the child process to complete
wpid = wait( & status) ;
if ( wpid == - 1 ) {
}
if ( WIFEXITED( status) ) {
printf ( "Child process %d exited with status %d\n " , wpid
, WEXITSTATUS
( status
) ) ; } else if ( WIFSIGNALED( status) ) {
printf ( "Child process %d killed by signal %d\n " , wpid
, WTERMSIG
( status
) ) ; }
printf ( "Parent process (PID: %d) exiting\n " , getpid
( ) ) ; }
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KCmludCBtYWluKCkgewogICAgcGlkX3QgcGlkLCB3cGlkOwogICAgaW50IHN0YXR1czsKCiAgICBwcmludGYoIlBhcmVudCBwcm9jZXNzIHN0YXJ0ZWQgKFBJRDogJWQpXG4iLCBnZXRwaWQoKSk7CgogICAgLy8gQ3JlYXRlIGEgY2hpbGQgcHJvY2VzcyB1c2luZyBmb3JrKCkKICAgIHBpZCA9IGZvcmsoKTsKCiAgICBpZiAocGlkIDwgMCkgewogICAgICAgIC8vIGZvcmsgZmFpbGVkCiAgICAgICAgcGVycm9yKCJmb3JrIGZhaWxlZCIpOwogICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0gZWxzZSBpZiAocGlkID09IDApIHsKICAgICAgICAvLyBDaGlsZCBwcm9jZXNzCiAgICAgICAgcHJpbnRmKCJDaGlsZCBwcm9jZXNzIChQSUQ6ICVkKSwgcGFyZW50IFBJRDogJWRcbiIsIGdldHBpZCgpLCBnZXRwcGlkKCkpOwoKICAgICAgICAvLyBSZXBsYWNlIHRoZSBjaGlsZCBwcm9jZXNzIHdpdGggYSBuZXcgcHJvZ3JhbSB1c2luZyBleGVjbAogICAgICAgIHByaW50ZigiQ2hpbGQgcHJvY2VzcyB3aWxsIG5vdyBleGVjdXRlICdscyAtbCcgY29tbWFuZFxuIik7CiAgICAgICAgZXhlY2woIi9iaW4vbHMiLCAibHMiLCAiLWwiLCBOVUxMKTsKCiAgICAgICAgLy8gSWYgZXhlY2wgcmV0dXJucywgaXQgbWVhbnMgaXQgZmFpbGVkCiAgICAgICAgcGVycm9yKCJleGVjbCBmYWlsZWQiKTsKICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CiAgICB9IGVsc2UgewogICAgICAgIC8vIFBhcmVudCBwcm9jZXNzCiAgICAgICAgcHJpbnRmKCJQYXJlbnQgcHJvY2VzcyB3YWl0aW5nIGZvciBjaGlsZCAoUElEOiAlZCkgdG8gY29tcGxldGVcbiIsIHBpZCk7CgogICAgICAgIC8vIFdhaXQgZm9yIHRoZSBjaGlsZCBwcm9jZXNzIHRvIGNvbXBsZXRlCiAgICAgICAgd3BpZCA9IHdhaXQoJnN0YXR1cyk7CiAgICAgICAgCiAgICAgICAgaWYgKHdwaWQgPT0gLTEpIHsKICAgICAgICAgICAgcGVycm9yKCJ3YWl0IGVycm9yIik7CiAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgICAgICB9CgogICAgICAgIGlmIChXSUZFWElURUQoc3RhdHVzKSkgewogICAgICAgICAgICBwcmludGYoIkNoaWxkIHByb2Nlc3MgJWQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iLCB3cGlkLCBXRVhJVFNUQVRVUyhzdGF0dXMpKTsKICAgICAgICB9IGVsc2UgaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKICAgICAgICAgICAgcHJpbnRmKCJDaGlsZCBwcm9jZXNzICVkIGtpbGxlZCBieSBzaWduYWwgJWRcbiIsIHdwaWQsIFdURVJNU0lHKHN0YXR1cykpOwogICAgICAgIH0KCiAgICAgICAgcHJpbnRmKCJQYXJlbnQgcHJvY2VzcyAoUElEOiAlZCkgZXhpdGluZ1xuIiwgZ2V0cGlkKCkpOwogICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKICAgIH0KfQ==