diff --git a/6.process_and_signal/file_communication.c b/6.process_and_signal/file_communication.c new file mode 100644 index 0000000..3ab6823 --- /dev/null +++ b/6.process_and_signal/file_communication.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void sigusr1action (int signal){ + + fprintf(stdout,"Parent:Ricevuto SIGUSR1\n"); + +} + +void sigchldaction (int signal){ + + fprintf(stdout,"Parent:Ricevuto SIGCHLD\n"); + + +} + + +int main (int index, char** in_data){ + + int duplicate; + duplicate = fork(); + if (duplicate < 0) + exit(-1); + if (duplicate == 0){ + //child + + int numero; + fscanf(stdin,"%d",&numero); + kill (getppid(),SIGUSR1); + fprintf(stdout,"Child:Process %d terminated\n",getpid()); + + }else{ + // parent + + struct sigaction sigusr1structure; + sigusr1structure.sa_handler = sigusr1action; + sigusr1structure.sa_flags = 0; + + + struct sigaction sigchldstructure; + sigchldstructure.sa_handler = sigchldaction; + sigchldstructure.sa_flags = 0; + + + sigaction (SIGUSR1, &sigusr1structure, NULL); + sigaction (SIGCHLD, &sigchldstructure, NULL); + + int status; + int pid; + + for (pid = waitpid(-1,&status,0);pid > 0;pid = waitpid(-1,&status,0)){ + fprintf(stdout,"Parent:Child %d terminated\n",pid); + } + + fprintf(stdout,"Parent:Process %d terminated\n",getpid()); + } + + + + + return 0; +} + diff --git a/6.process_and_signal/waitc b/6.process_and_signal/waitc new file mode 100755 index 0000000..231ba34 Binary files /dev/null and b/6.process_and_signal/waitc differ diff --git a/6.process_and_signal/waitc.c b/6.process_and_signal/waitc.c new file mode 100644 index 0000000..3ab6823 --- /dev/null +++ b/6.process_and_signal/waitc.c @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void sigusr1action (int signal){ + + fprintf(stdout,"Parent:Ricevuto SIGUSR1\n"); + +} + +void sigchldaction (int signal){ + + fprintf(stdout,"Parent:Ricevuto SIGCHLD\n"); + + +} + + +int main (int index, char** in_data){ + + int duplicate; + duplicate = fork(); + if (duplicate < 0) + exit(-1); + if (duplicate == 0){ + //child + + int numero; + fscanf(stdin,"%d",&numero); + kill (getppid(),SIGUSR1); + fprintf(stdout,"Child:Process %d terminated\n",getpid()); + + }else{ + // parent + + struct sigaction sigusr1structure; + sigusr1structure.sa_handler = sigusr1action; + sigusr1structure.sa_flags = 0; + + + struct sigaction sigchldstructure; + sigchldstructure.sa_handler = sigchldaction; + sigchldstructure.sa_flags = 0; + + + sigaction (SIGUSR1, &sigusr1structure, NULL); + sigaction (SIGCHLD, &sigchldstructure, NULL); + + int status; + int pid; + + for (pid = waitpid(-1,&status,0);pid > 0;pid = waitpid(-1,&status,0)){ + fprintf(stdout,"Parent:Child %d terminated\n",pid); + } + + fprintf(stdout,"Parent:Process %d terminated\n",getpid()); + } + + + + + return 0; +} +