Nội dung của tài liệu trình bày về lý thuyết về xử lý tiến trình trong Linux, khái quát về Linux, định nghĩa của tiến trình, cách hoạt động của tiến trình, cấu trúc tiến trình, bảng thông tin tiến trình, xem thông tin của tiến trình, tạo lập tiến trình và một số bài thực hành về tạo lập tiến trình.
rình WIFSIGNALED (stat_loc) Trả trị khác tiến trình kết thúc tín hiệu gửi đến WTERMSIG(stat_loc) Nếu WIFSIGNALED khác 0, macro cho biết số tín hiệu hủy tiến trình WIFSTOPPED(stat_loc) Trả trị khác tiến trình dừng WSTOPSIG(stat_loc) Nếu WIFSTOPPED trả trị khác 0, macro trả số hiệu signal II Thực Hành Bài Sử dụng hàm system(), system_demo.c tạo tiến trình sau: Tạo thư mục ThucHanh1 ThucHanh2 Tạo tập tin Tho.c thư mục ThucHanh1 ghi chuỗi “troi hom that dep !” vào tập tin vừa tạo (sử dụng lệnh echo để ghi chuỗi vào tập tin: echo noi_dung_chuoi >ten_tap_tin) Sao chép tập tin vừa tạo sang thư mục ThucHanh2 hiển thị lên hình Bài Sử dụng hàm execlp để thay tiến trình tiến trình ps –af Hệ Điều Hành #include #include int main() { printf( "Thuc thi lenh ps voi execlp\n" ); execlp( "ps", "ps", "–ax", ); printf( "Thuc hien xong! Nhung chung ta se khong thay duoc dong nay.\n" ); exit( ); } Bài Tạo tập tin fork_demo.c sử dụng hàm fork() đó: In câu thông báo: “Khong the tao tien trinh !” hàm fork() trả giá trị -1 Ngược lại: - In lần câu thông báo: “Day la tien trinh !” mã trả - In lần câu thông báo: “Day la tien trinh cha !” mã trả PID tiến trình #include #include #include int main() { pid_t pid; char * message; int n; pid = fork(); switch ( pid ) { case -1: printf( "Khong the tao tien trinh !" ); exit(1); case 0: message = "Day la tien trinh !"; n = 0; for ( ; n < 5; n++ ) { printf( "%s", message ); sleep( ); } break; default: message = "Day la tien trinh cha !"; n = 0; for ( ; n < 3; n++ ) { printf( "%s", message ); sleep( ); } break; } exit( ); } Biên dịch thực thi chương trình này, thấy tiến trình hoạt động đồng thời in kết đan xen Nếu muốn xem liên quan PID PPID tiến trình cha lệnh fork() phát sinh, thực chương trình sau: $./fork_demo & ps – af Bài Sử dụng hàm wait() để chờ tiến trình kết thúc sau gọi fork(), wait_child.c #include #include #include #include int main() { pid_t pid; int child_status; int n; // nhân tiến trình, tạo pid = fork(); switch ( pid ) { case -1: // fork khơng tạo tiến trình printf("Khong the tao tien trinh moi"); exit( ); case 0: // fork thành cơng, tiến trình n = 0; for ( ; n < 5; n++ ) { printf( "Tien trinh con" ); sleep( ); } exit( ); // Mã lỗi trả tiến trình default: // fork thành cơng, tiến trình cha printf("Tien trinh cha, cho tien trinh hoan thanh.\n”); // Chờ tiến trình kết thúc wait( &child_status ); printf("Tien trinh cha – tien trinh hoan thanh.\n"); } return ( ); } Bài Sử dụng hàm wait() để chờ tiến trình kết thúc sau gọi fork(), wait_child2.c, kiểm tra mã lỗi trả từ tiến trình #include #include #include #include int main() { pid_t pid; int child_status; int n; // nhân tiến trình, tạo pid = fork(); switch ( pid ) { case -1: // fork khơng tạo tiến trình printf("Khong the tao tien trinh moi"); exit( ); case 0: // fork thành công, tiến trình n = 0; for ( ; n < 5; n++ ) { printf( "Tien trinh con" ); sleep( ); } exit( 37 ); // Mã lỗi trả tiến trình default: // fork thành cơng, tiến trình cha n = 3; for ( ; n > 0; n ) { printf( "Tien trinh cha" ); sleep( ); } // Chờ tiến trình kế t thúc wait( &child_status ); // Kiểm tra in mã lỗi trả tiến trình printf( "Tien trinh hoan thanh: PID = %d\n", pid ); if ( WIFEXITED( child_status )) printf( "Tien trinh thoat voi ma %d\n", WEXITSTATUS( child_status ) ); else printf( "Tien trinh ket thuc binh thuong\n" ); break; } exit( ); } ... chép tập tin vừa tạo sang thư mục ThucHanh2 hiển thị lên hình Bài Sử dụng hàm execlp để thay tiến trình tiến trình ps –af Hệ Điều Hành #include #include int main() { printf(... int n; // nhân tiến trình, tạo pid = fork(); switch ( pid ) { case -1 : // fork không tạo tiến trình printf("Khong the tao tien trinh moi"); exit( ); case 0: // fork thành công, tiến trình n = 0;... n; // nhân tiến trình, tạo pid = fork(); switch ( pid ) { case -1 : // fork khơng tạo tiến trình printf("Khong the tao tien trinh moi"); exit( ); case 0: // fork thành cơng, tiến trình n = 0; for