Đang tải... (xem toàn văn)
Viết chương trình để truyền đối vào số nguyên dương n vào và...102.. Sử dụng lời gọi system để viết chương trình thực thi các lệnh Linux đã học..113.. Tạo ra cây tiến trình như sau, với
Trang 1TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP NMHĐH HK2, 2021-2022
Lab 3Thành Viên: Nguyễn Ngô Đăng Khoa (521H0084)
1 Viết chương trình để truyền đối vào số nguyên dương n vào và 10
2 Sử dụng lời gọi system() để viết chương trình thực thi các lệnh Linux đã học 11
3 Tạo ra cây tiến trình như sau, với mỗi tiến trình con, in ra ID của nó và ID của tiến trình cha 124 Viết một chương trình lặp vô tận với lời gọi while(1); và thực thi nó Đưa tiến trình này vào “background” thông qua việc gửi tín hiệu SIGTSTP bằng cách nhấn Ctrl + Z Sử dụng lệnh ps để xác định PID của nó và sử dụng kill để kết thúc nó.145 Viết chương trình mà khi chạy nó sinh ra tiến trình con, để tiến trình con trở thành zombie Tiến trình zombie này cần tồn tại trong hệ thống tối thiểu 10 giây (bằng cách dùng lời gọi sleep(10)) Sau đó dùng lệnh ps –l để xem trạng thái các
Trang 2tiến trình Kết liễu zombie này bằng cách xác định PID của tiến trình cha nó và sử dụng lệnh kill 15KẾT LUẬN 16
Trang 3A PHẦN THỰC HÀNHVí Dụ 1: 1.1 Tạo tiến trình
A: Code Chương Trình
Chúy ý: code phải được giải thích để thể hiện hiểu rõ chương trình mình biết//P1.c
printf("Current process ID: %d\n", getpid()); printf("Parent process ID: %d\n", getppid()); return ;0
{ // make two process which run same
// program after this instruction
ộ // Thêm m t vài l nh printf và theo dõi.ệ
fork(); fork();
Trang 4// thêm m t vài l nh fork vào đây và xem thay đ i.
printf("Hello world! from Process ID: %d\n",
getpid()); return ;0
(pid ) if <0 printf("fork error! No child created\n"); elseif(pid ==0)
{
//sleep(2);
printf("Hello from Child!\n"); printf("Child ID is %d!\n", getpid()); }
else
{
printf("Hello from Parent!\n"); printf("Parent ID is %d!\n", getpid()); }
Trang 5// Fork returns process id
// Child process
else exit(0);
return ;0
Trang 6// A C program to demonstrate Orphan Process // Parent process finishes execution while the// child process is running The child process// becomes orphan.
// Create a child process
pid int =fork();
(pid )if >0
printf("in parent process\n");
// Note that pid is 0 in child process
// and negative if fork() fails
elseif (pid ==0) {
sleep( );6
printf("in child process\n"); }
return ;0
}
Trang 8intmain( intargc, char *argv[]){
pnum, count, retval, child_no;int
pnum =atoi(argv[ ]);1
child_no count;=
printf("Tien trinh %d, PID %d\n", child_no,
getpid()); } else
{
for(count ; count pnum; count=0 < ++) wait(NULL); printf("Tien trinh cha PID %d\n", getpid()); }
Trang 9{ i;int
pid int =fork(); (pid if == )0
for = (i ; i ; i0 <5 ++) printf("I am Child\n"); else
{
signal(SIGCHLD,SIG_IGN); printf("I am Parent\n"); while( );1
}}
B: Kết Quả Demo
Trang 10B PHẦN BÀI TẬP
1 Viết chương trình để truyền đối vào số nguyên dương n vào và
a Tiến trình cha tiếp tục tính rồi xuất ra tổng S = 1 + 2 + … + n
b Đồng thời tạo một tiến trình con tính tổng các ước số của n và in ra màn hình.
A Code chương trình:
intmain( intargc, char *argv[]){
pid_t pid =fork();
(pid ) if <0 printf("fork error! No child created\n"); for(int = i 1 1; < argc; i++)
{
k int =atoi(argv[ ]);1
(pid if == )0
{ t ;int =0
for(int = i 1; i <= k; i++) {
(k i if % == ) t 0 += i;
Trang 11wait(NULL);
for(int = i 0; i <= k; i++) s += i;
printf("Tong cac gia tri tu 1 den %d la: %d\n", k,s);
} return ;0
}}
Trang 12printf("Command pwd\n"); re =system("pwd"); printf("Command ls -a\n"); re =system("ls -a");
(re if !=-1) printf("System call is done!\n"); printf("Call system to execute ps -a\n"); re =system("ps -a");
(re if !=-1) printf("System call ps is done!\n"); return ;0
Trang 13n1 int =fork(); n2 int =fork();
(n1 if ==0) {
(n2 if ==0) {
printf("H ");
printf("my id is %d, my parentid is %d\n",
getpid(), getppid()); }
}
printf("B\n");
printf("my id is %d, my parentid is %d\n",
getpid(), getppid()); }
} return ;0
}
Trang 14{ i;int
pid int =fork(); (pid if == )0
for = (i ; i ; i0 <5 ++) printf("I am Child\n"); else
{
Trang 15signal SIGCHLD( ,SIG_IGN); printf("I am Parent\n"); while( );1
}}
pid_t child_pid =fork();
Trang 16
// Child process
(child_pid if >0) printf("%d\n",getpid()); // Parent process
elseif(child_pid == ) 0
sleep( );10
return ;0