diff --git a/Topic-2/child_functions.c b/Topic-2/child_functions.c index 0567e49..fbcd2d4 100644 --- a/Topic-2/child_functions.c +++ b/Topic-2/child_functions.c @@ -1,5 +1,5 @@ // -// Wrote for Computer Networks and Systems lab classes +// Written for Computer Networks and Systems lab classes // AUTHOR : Sergiusz Warga void child_task() { diff --git a/Topic-2/child_functions.h b/Topic-2/child_functions.h index bcbaacd..e4fae98 100644 --- a/Topic-2/child_functions.h +++ b/Topic-2/child_functions.h @@ -1,5 +1,5 @@ // -// Wrote for Computer Networks and Systems lab classes +// Written for Computer Networks and Systems lab classes // AUTHOR : Sergiusz Warga #ifndef AAE_CNAS_LABS_CHILD_FUNCTIONS_H diff --git a/Topic-2/task_2_1.c b/Topic-2/task_2_1.c index 55e7df8..596fb64 100644 --- a/Topic-2/task_2_1.c +++ b/Topic-2/task_2_1.c @@ -1,5 +1,5 @@ // -// Wrote for Computer Networks and Systems lab classes +// Written for Computer Networks and Systems lab classes // AUTHOR : Sergiusz Warga #include diff --git a/Topic-2/task_2_2.c b/Topic-2/task_2_2.c index 5f5d4ff..0803099 100644 --- a/Topic-2/task_2_2.c +++ b/Topic-2/task_2_2.c @@ -1,5 +1,5 @@ // -// Wrote for Computer Networks and Systems lab classes +// Written for Computer Networks and Systems lab classes // AUTHOR : Sergiusz Warga #include diff --git a/Topic-2/task_2_3.c b/Topic-2/task_2_3.c index ceea33c..ab0f5f5 100644 --- a/Topic-2/task_2_3.c +++ b/Topic-2/task_2_3.c @@ -1,5 +1,5 @@ // -// Wrote for Computer Networks and Systems lab classes +// Written for Computer Networks and Systems lab classes // AUTHOR : Sergiusz Warga #include diff --git a/Topic-2/task_2_4.c b/Topic-2/task_2_4.c index d4e233f..74b2bb8 100644 --- a/Topic-2/task_2_4.c +++ b/Topic-2/task_2_4.c @@ -1,5 +1,5 @@ // -// Wrote for Computer Networks and Systems lab classes +// Written for Computer Networks and Systems lab classes // AUTHOR : Sergiusz Warga #include @@ -10,7 +10,7 @@ #include #include -const char * time_from_main_exec() { +const char * get_timestamp() { struct timeval now; gettimeofday(&now, NULL); char buff[127]; @@ -27,12 +27,16 @@ void parent_before_child() { exit(EXIT_FAILURE); } if (pid != 0) { // If this is a parent process. - printf("===\n%s\nI am a parent.\nMy PID is: %d\n===", time_from_main_exec(), getpid()); + printf("===\n%s\nI am a parent.\nMy PID is: %d\n===", get_timestamp(), getpid()); + sleep(1); kill(getpid(), SIGTERM); } else { + printf("===\n%s\nI am a child.\nMy PID is: %d\nMy PPID is: %d\n===", get_timestamp(), getpid(), getppid()); sleep(1); - printf("===\n%s\nI am a child.\nMy PID is: %d\n===", time_from_main_exec(), getpid()); // This line will not be printed, as (usually) parent process will finish - // its execution in less than 1 second + printf("===\n%s\nI am a child.\nMy PID is: %d\nMy PPID is: %d\n===", get_timestamp(), getpid(), getppid()); + sleep(1); + printf("===\n%s\nI am a child.\nMy PID is: %d\nMy PPID is: %d\n===", get_timestamp(), getpid(), getppid()); + // When parent is killed PPID of its child process becomes 1 (and so the init process becomes a new parent). } } @@ -46,29 +50,33 @@ void child_before_parent() { exit(EXIT_FAILURE); } if (pid == 0) { // If this is a parent process. - printf("===\n%s\nI am a child.\nMy PID is: %d\n===", time_from_main_exec(), getpid()); + printf("===\n%s\nI am a child.\nMy PID is: %d\nMy PPID is: %d\n===", get_timestamp(), getpid(), getppid()); + sleep(1); kill(getpid(), SIGTERM); } else { + printf("===\n%s\nI am a parent.\nMy PID is: %d\n===", get_timestamp(), getpid()); sleep(1); - printf("===\n%s\nI am a parent.\nMy PID is: %d\n===", time_from_main_exec(), getpid()); + printf("===\n%s\nI am a parent.\nMy PID is: %d\n===", get_timestamp(), getpid()); + sleep(1); + printf("===\n%s\nI am a parent.\nMy PID is: %d\n===", get_timestamp(), getpid()); } } int main() { - + int status; pid_t pid; - printf("%s: Grandparent process has PID: %d\n", time_from_main_exec(), getpid()); + printf("%s: Grandparent process has PID: %d\n", get_timestamp(), getpid()); pid = fork(); if (pid == 0) { // If child process - printf("%s: Process with PID %d will execute funs.\n", time_from_main_exec(), getpid()); + printf("%s: Process with PID %d will execute funs.\n", get_timestamp(), getpid()); child_before_parent(); - sleep(1); - parent_before_child(); - sleep(1); - } else { // If parent process - printf("%s: Grandparent's child process has PID: %d\n", time_from_main_exec(), pid); sleep(5); + parent_before_child(); + sleep(5); + } else { // If parent process + printf("%s: Grandparent's child process has PID: %d\n", get_timestamp(), pid); + sleep(12); } return 0; } \ No newline at end of file