Fixed a typo and finished task_2_4

This commit is contained in:
Sergiusz Warga 2021-03-10 22:56:48 +01:00
parent 79fc63135b
commit 34e453a786
6 changed files with 28 additions and 20 deletions

View File

@ -1,5 +1,5 @@
// //
// Wrote for Computer Networks and Systems lab classes // Written for Computer Networks and Systems lab classes
// AUTHOR : Sergiusz Warga // AUTHOR : Sergiusz Warga
void child_task() { void child_task() {

View File

@ -1,5 +1,5 @@
// //
// Wrote for Computer Networks and Systems lab classes // Written for Computer Networks and Systems lab classes
// AUTHOR : Sergiusz Warga // AUTHOR : Sergiusz Warga
#ifndef AAE_CNAS_LABS_CHILD_FUNCTIONS_H #ifndef AAE_CNAS_LABS_CHILD_FUNCTIONS_H

View File

@ -1,5 +1,5 @@
// //
// Wrote for Computer Networks and Systems lab classes // Written for Computer Networks and Systems lab classes
// AUTHOR : Sergiusz Warga // AUTHOR : Sergiusz Warga
#include <stdio.h> #include <stdio.h>

View File

@ -1,5 +1,5 @@
// //
// Wrote for Computer Networks and Systems lab classes // Written for Computer Networks and Systems lab classes
// AUTHOR : Sergiusz Warga // AUTHOR : Sergiusz Warga
#include <stdio.h> #include <stdio.h>

View File

@ -1,5 +1,5 @@
// //
// Wrote for Computer Networks and Systems lab classes // Written for Computer Networks and Systems lab classes
// AUTHOR : Sergiusz Warga // AUTHOR : Sergiusz Warga
#include <stdio.h> #include <stdio.h>

View File

@ -1,5 +1,5 @@
// //
// Wrote for Computer Networks and Systems lab classes // Written for Computer Networks and Systems lab classes
// AUTHOR : Sergiusz Warga // AUTHOR : Sergiusz Warga
#include <stdio.h> #include <stdio.h>
@ -10,7 +10,7 @@
#include <signal.h> #include <signal.h>
#include <time.h> #include <time.h>
const char * time_from_main_exec() { const char * get_timestamp() {
struct timeval now; struct timeval now;
gettimeofday(&now, NULL); gettimeofday(&now, NULL);
char buff[127]; char buff[127];
@ -27,12 +27,16 @@ void parent_before_child() {
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (pid != 0) { // If this is a parent process. 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); kill(getpid(), SIGTERM);
} else { } else {
printf("===\n%s\nI am a child.\nMy PID is: %d\nMy PPID is: %d\n===", get_timestamp(), getpid(), getppid());
sleep(1); 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 printf("===\n%s\nI am a child.\nMy PID is: %d\nMy PPID is: %d\n===", get_timestamp(), getpid(), getppid());
// its execution in less than 1 second 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); exit(EXIT_FAILURE);
} }
if (pid == 0) { // If this is a parent process. 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); kill(getpid(), SIGTERM);
} else { } else {
printf("===\n%s\nI am a parent.\nMy PID is: %d\n===", get_timestamp(), getpid());
sleep(1); 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 main() {
int status;
pid_t pid; 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(); pid = fork();
if (pid == 0) { // If child process 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(); 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); 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; return 0;
} }