#include<bits/stdc++.h>
#include<unistd.h>
#include<signal.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<stdlib.h>
void handle_sigusr(int sig) {
pid_t cpid = fork();
if(cpid==0){
const char *args[] = {"/bin/ls","-l",NULL};
const char *envp[] = {NULL};
execve("/bin/ls",(char *const *)args,(char *const *)envp);
}
}
int main(){
if(signal(SIGUSR1,handle_sigusr)==SIG_ERR){
perror("signal");
exit(1);}
pid_t pid = fork();
if(pid<0){
perror("fork error");
exit(1);}
else if(pid==0){
while(1) pause();
}else{
kill(pid,SIGUSR1);
while(1) {
sleep(3);
printf("\nfather -> child\n");
kill(pid,SIGUSR1);}
}
return 0;
}
Makefile
prac1: prac1.cpp
g++ prac1.cpp -o prac1
prac1.o: prac1.cpp
g++ -c prac1.cpp -o prac1.o
.PHONY: clean
clean:
rm -f prac1 *.o