#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" , "pwd" , "-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+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KCmludCBtYWluKCkgewogICAgcGlkX3QgcGlkLCB3cGlkOwogICAgaW50IHN0YXR1czsKCiAgICBwcmludGYoIlBhcmVudCBwcm9jZXNzIHN0YXJ0ZWQgKFBJRDogJWQpXG4iLCBnZXRwaWQoKSk7CgogICAgLy8gQ3JlYXRlIGEgY2hpbGQgcHJvY2VzcyB1c2luZyBmb3JrKCkKICAgIHBpZCA9IGZvcmsoKTsKCiAgICBpZiAocGlkIDwgMCkgewogICAgICAgIC8vIGZvcmsgZmFpbGVkCiAgICAgICAgcGVycm9yKCJmb3JrIGZhaWxlZCIpOwogICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0gZWxzZSBpZiAocGlkID09IDApIHsKICAgICAgICAvLyBDaGlsZCBwcm9jZXNzCiAgICAgICAgcHJpbnRmKCJDaGlsZCBwcm9jZXNzIChQSUQ6ICVkKSwgcGFyZW50IFBJRDogJWRcbiIsIGdldHBpZCgpLCBnZXRwcGlkKCkpOwoKICAgICAgICAvLyBSZXBsYWNlIHRoZSBjaGlsZCBwcm9jZXNzIHdpdGggYSBuZXcgcHJvZ3JhbSB1c2luZyBleGVjbAogICAgICAgIHByaW50ZigiQ2hpbGQgcHJvY2VzcyB3aWxsIG5vdyBleGVjdXRlICdscyAtbCcgY29tbWFuZFxuIik7CiAgICAgICAgZXhlY2woIi9iaW4vbHMiLCAicHdkIiwgIi1sIiwgTlVMTCk7CgogICAgICAgIC8vIElmIGV4ZWNsIHJldHVybnMsIGl0IG1lYW5zIGl0IGZhaWxlZAogICAgICAgIHBlcnJvcigiZXhlY2wgZmFpbGVkIik7CiAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBQYXJlbnQgcHJvY2VzcwogICAgICAgIHByaW50ZigiUGFyZW50IHByb2Nlc3Mgd2FpdGluZyBmb3IgY2hpbGQgKFBJRDogJWQpIHRvIGNvbXBsZXRlXG4iLCBwaWQpOwoKICAgICAgICAvLyBXYWl0IGZvciB0aGUgY2hpbGQgcHJvY2VzcyB0byBjb21wbGV0ZQogICAgICAgIHdwaWQgPSB3YWl0KCZzdGF0dXMpOwogICAgICAgIAogICAgICAgIGlmICh3cGlkID09IC0xKSB7CiAgICAgICAgICAgIHBlcnJvcigid2FpdCBlcnJvciIpOwogICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoV0lGRVhJVEVEKHN0YXR1cykpIHsKICAgICAgICAgICAgcHJpbnRmKCJDaGlsZCBwcm9jZXNzICVkIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxuIiwgd3BpZCwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CiAgICAgICAgfSBlbHNlIGlmIChXSUZTSUdOQUxFRChzdGF0dXMpKSB7CiAgICAgICAgICAgIHByaW50ZigiQ2hpbGQgcHJvY2VzcyAlZCBraWxsZWQgYnkgc2lnbmFsICVkXG4iLCB3cGlkLCBXVEVSTVNJRyhzdGF0dXMpKTsKICAgICAgICB9CgogICAgICAgIHByaW50ZigiUGFyZW50IHByb2Nlc3MgKFBJRDogJWQpIGV4aXRpbmdcbiIsIGdldHBpZCgpKTsKICAgICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CiAgICB9Cn0=