Module2: Lập trình Shell và C Quản lý tiến trình A. TÓM TẮT LÝ THUYẾT:

Similar documents
STACK và QUEUE. Lấy STACK

HƯỚNG DẪN SỬ DỤNG HỆ THỐNG CẬP NHẬT CHỨNG THƯ SỐ HOTLINE:

Bài Thực hành Asp.Net - Buổi 1 - Trang: 1

BÀI TẬP THỰC HÀNH LẬP TRÌNH WINDOWS C#

BÀI 1: VBA LÀ GÌ? TẠO MACRO, ỨNG DỤNG CÁC HÀM TỰ TẠO (UDF), CÀI ĐẶT ADD-INS VBA là gì?

HƯỚNG DẪN CÁCH SỬ DỤNG WINDOWS MOVIE MAKER

Tạo Project với MPLAB

Chương 5. Network Layer 19/09/2016 1

Tài liệu hướng dẫn: Stored Procedure

Internet Protocol. Bởi: Phạm Nguyễn Bảo Nguyên

Cài đặt và cấu hình StarWind iscsi trên Windows. iscsi SAN là gì?

HƯỚNG DẪN CÀI ĐẶT PHẦN MỀM DIỆT VIRUS AVIRA

HƯỚNG DẪN SỬ DỤNG ĐẦU GHI H.264 DVR VISION VS (4CH - 8CH - 16CH)

CẤU TRÚC DỮ LIỆU NÂNG CAO

Khoa KH & KTMT Bộ môn Kỹ Thuật Máy Tính

Bộ môn MMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

TÀI LIỆU THỰC HÀNH MÔN CƠ SỞ DỮ LIỆU NÂNG CAO

Giáo trình này được biên dịch theo sách hướng dẫn của Sun Light. Vì là hướng dẫn kỹ thuật, trong này những thuật ngữ kỹ thuật bằng tiếng Anh tôi chỉ

Nhấn nút New để tạo 1 biến mới Trang 17

Chương 6. Transport Layer. Tài liệu : Forouzan, Data Communication and Networking

HƯỚNG DẪN SỬ DỤNG PLESK PANEL

Khối: Cao Đẳng nghề và Trung Cấp Năm 2009

Hướng dẫn cài đặt FPT

Chương 5. Network Layer. Phần 1 - Địa chỉ IPv4. Tài liệu : Forouzan, Data Communication and Networking

Bài tập lớn số 1. Giả lập bộ định thời

ĐỌC, GHI XML VỚI C# TRONG ADO.NET --- SỬ DỤNG VISUAL STUDIO

Bộ môn HTMT&TT, Khoa Công Nghệ Thông Tin và TT, ĐH Cần Thơ

SIMULATE AND CONTROL ROBOT

SIEMENS INDUSTRIAL NETWORKS

Cụ thể những công việc mà AndroidManifest.xml thực hiện: - Đặt tên cho Java package của ứng dụng.

Mô hình dữ liệu quan hệ (Relational data model)

BÀI THỰC HÀNH SỐ 1. Quản trị tập tin: 1/ Tạo các thư mục sau: Bài tập thực hành linux Linuxlab. bt1 bt11 bt111. bt121. bt12. bh1 bh11 bh111.

NHẬP MÔN LẬP TRÌNH KHOA HỌC DỮ LIỆU. Bài 10: Thư viện Pandas (2)

Tình huống 1: PPPoE với Username và Password

GIẢI THUẬT ĐỊNH TUYẾN (ROUTING ALGORITHM)

LÂ P TRI NH WEB ASP.NET

Entity Framework (EF)

Bài tập căn bản Visual Basic.Net Vòng lặp. txtn. txtketqua. btntinh. txtn. txtketqua. btntinh. Trang 1

BẢO MẬT TRONG SQL SERVER

Bài 10: Cấu trúc dữ liệu

Online Appointment System will work better with below conditions/ Hệ thống đặt hẹn online sẽ hoạt động tốt hơn với điều kiện sau đây:

Giao tiếp giữa các tiến trình

BELGIUM ONLINE APPOINTMENT

B5: Time to coding. Tới thư mục src/example.java và thay đổi nội dung file như sau: Mã: package at.exam;

NHÚNG. Vi ñiều khiển BM Kỹ Thuật ðiện Tử - ðh Bách Khoa TP.HCM 2

Nội dung chính của chương. Các công nghệ đĩa cứng Cấu tạo vật lý của đĩa cứng Cấu tạo logic của đĩa cứng Cài đặt đĩa cứng như thế nào?

Chương 7. Application Layer. Tài liệu : Forouzan, Data Communication and Networking

CHƯƠNG 2: CÁC ĐẶC ĐIỂM VỀ MÔI TRƯỜNG PHÁT TRIỂN (IDE)

I. Hướng Dẫn Đăng Nhập:

Lecture 12. Trees (1/2) Nội dung bài học:

LẬP TRÌNH WINDOWS FORM VỚI CÁC CONTROL NÂNG CAO (Các control trình bày dữ liệu dưới dạng danh sách)

Kỹ thuật thu nhỏ đối tượng trong Design (Layout)

HƢỚNG DẪN TRIỂN KHAI KASPERSKY - MOBILE DEVICE MANAGEMENT

HƯỚNG DẪN SỬ DỤNG NHANH MINDJET MIND MANAGER

Tạo repository mới. The working tree. The staging index. Lệnh git init tạo một repository loại git. tại thư mục hiện tại: $ git init

Bài 7: Các cấu trúc điều khiển

Bài 13: C++11. EE3490: Kỹ thuật lập trình HK1 2017/2018 TS. Đào Trung Kiên ĐH Bách khoa Hà Nội

Phần 2. SỬ DỤNG POWERPOINT ĐỂ CHUẨN BỊ NỘI DUNG TRÌNH BÀY

PHÁT TRIỂN ỨNG DỤNG WEB

Các kiểu định địa chỉ họ MSC-51

TÀI LIỆU HƯỚNG DẪN SỬ DỤNG HOSTING PLESK PANEL

Tìm hiểu Group Policy Object và các ví dụ

BÀI LAB ĐỔI TÊN DOMAIN

GV: Phạm Đình Sắc or

Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM LẬP TRÌNH MINICHAT. Bài giảng 3. Trang1. Khoa Khoa Học Và Kỹ Thuật Máy Tính

Lab01: M V C Lưu ý: Để thực hành, các bạn phải cài Visual Studio 2013 trở lên mới hỗ trợ MVC5.

Dọn "rác" Windows 7 vào dịp cuối năm

TỔNG QUAN VỀ.NET VÀ C#

Bài thực hành số 2 QUYỀN và ROLE

BÀI 4 GIAO TIẾP GIỮA CÁC TIẾN TRÌNH TRONG LINUX

BÀI 6a LẬP TRÌNH ĐA TUYẾN (MULTI THREAD)

BÀI 6 LÀM VIỆC VỚI THÀNH PHẦN MỞ RỘNG CỦA CSS3

LẬP TRÌNH 8051 SỐ HỌC VÀ LÔ GIC

MỤC LỤC. Giáo trình Thiết kế web Trang 1

JAVASCRIPT. Giảng viên : Ths. PHẠM ĐÀO MINH VŨ

LAB IP SLA Bài 1. Bùi Quốc Kỳ ***

TỔNG QUAN LẬP TRÌNH JAVA

BÀI GIẢNG CHƯƠNG 3 GIAO TIẾP KẾT NỐI SỐ LIỆU

Môn Học: Cơ Sở Dữ Liệu 2. Chương 3 LẤY DỮ LIỆU TỪ NHIỀU NGUỒN

Hệ điều hành Bài tập tuần 7_ Chúng ta làm quen một số lệnh thao tác với hệ thống file trong Linux :

Ôn tập Thiết bị mạng và truyền thông DH07TT - Lưu hành nội bộ (không sao chép dưới mọi hình thức)

HỢP ĐỒNG MUA BÁN HÀNG HÓA QUỐC TẾ GV: NGUYỄN THỊ BÍCH PHƯỢNG

HỆ THỐNG FILE TRÊN PC

CHAPTER 6: DANH SÁCH LIÊN KẾT (LINKED LISTS)

HTML DOM - Forms. MSc. nguyenhominhduc

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ CDN

Exceptions. Outline 7/31/2012. Exceptions. Exception handling is an important aspect of objectoriented. Chapter 10 focuses on:

HƯỚNG DẪN QUẢN TRỊ HỆ THỐNG

Hướng Dẫn Thực Hành Tập tin & Thư mục

Bài thực hành 1: Chỉ mục trong SQL Server

Khối: Cao Đẳng nghề và Trung Cấp Năm 2009

Cấu hình Router FTTH ---X---

HƯỚNG DẪN SỬ DỤNG DỊCH VỤ CDN

Quản trị Linux nâng cao. Tháng 9/2013

Kiến trúc 8051 và giới thiệu về ngôn ngữ lập trình Assembly

biến Global có thể được áp dụng cho tất cả các extension trong tất cả các context trong Dialplan.

Bài 10. Cấu trúc liên nối. khác nhau được gọi là cấu trúc liên nối. nhu cầu trao đổi giữa các module.

Google Search Engine. 12/24/2014 Google Search Engine 1

CHƯƠNG VII CASCADING STYLE SHEET-CSS

Parallels Cloud Server 6.0

Transcription:

Module2: Lập trình Shell và C Quản lý tiến trình A. TÓM TẮT LÝ THUYẾT: 1. SHELL SCRIPT a. Sử dụng các cấu trúc điều khiển trong Module1 b. Tính toán biểu thức trong Shell: sử dụng một trong các cách sau expr command ví dụ: $ expr 5 + 10 Cho kết quả 15 $ a=10 b=5 $ expr $a + $b Cho kết quả 15 $ expr $a / $b Cho kết quả 2 $ expr $a * $b expr: syntax error $ expr $a \* $b Cho kết quả 50 $ x=`expr $a + $b` $ echo $x Cho kết quả 15 $(()) construct. Ví dụ: $ c=$(($a+9)) $ echo $c 19 $ c=$((a+9)) #Đúng, Không cần ký hiệu $. $ c=$((a + 9)) #Đúng, không hạn chế khoảng trắng. $ c= $((a + b)) #Sai, thừa khoảng trắng sau phép gán. let Ví dụ: $ let "a = a + 5";echo $a 20 $ let a++ ; echo $a #tương tự ((i++)) 16 $[] Ví dụ: $ x=85 $ y=15 $ echo $[x+y] cho kết quả 100 $ echo $[x/y] cho kết quả 5 $ c=$[x*y] $ echo $c cho kết quả 1275 2. LẬP TRÌNH C TRONG LINUX

Chọn trình soạn thảo để soạn tập tin.c: vi, nano, gedit, emacs, o Sử dụng vi: $vi <tên tập tin> : Tạo tập tin mới :w - ghi vào tập tin :x - lưu và thoát khỏi chế độ soạn thảo :wq - lưu và thoát khỏi chế độ soạn thảo :w - lưu vào tập tin mới :q - thoát nếu ko có thay đổi :q! - thoát không lưu :r - mở tập tin đọc o Sử dụng nano nano <tên tập tin>: tạo tập tin mới Ctrl-O: Lưu file (giữ phím Ctrl và bấm O) Ctrl-X: Thoát khỏi nano Biên dịch chương trình gcc -o <filename> <filename.c> Thực thi./filename Để tránh việc nhập./ mỗi lần thực thi chương trình, cần thêm đường dẫn đến thư mục hiện hành vào biến PATH. Cú pháp: PATH=$PATH:<Đường dẫn> Lưu ý: Cú pháp và các cấu trúc điều khiển của C (Sinh viên phải tự xem trước) 3. QUẢN LÝ TIẾN TRÌNH a) Định danh của tiến trình: Mỗi tiến trình có một PID duy nhất bắt đầu từ 0. Một số PID đặc biệt: 0: scheduler 1: init 2: page daemon b) Bộ nhớ của tiến trình Text: chứa chương trình code thực thi Data: vùng dữ liệu - chứa các biến Stack: chứa trạng thái và các thông tin liên quan đến việc gọi hàm c) Lấy đối số và biến môi trường int argc: số đối số của chương trình khi chạy char *argv[]: danh sách đối số extern char **environ: danh sách biến môi trường

Ví dụ 1: #include <stdlib.h> extern char **environ; int main(int argc, char *argv[]) { int i; printf("\nnumber of arguments is %d",argc); printf("\narguments:\n"); for(i=0; i<argc; i++) printf("argv[%d]=%s\n",i,argv[i]); getchar(); for (i=0; environ[i]!=(char *)0; i++) printf("%s\n",environ[i]); return 0; d) Lấy PID của tiến trình pid_t getpid(void); //Lấy PID của process hiện hành pid_t getppid(void); //Lấy PID của process cha ví dụ 2: #include <unistd.h> int main() { printf("process id: %d\n", getpid()); printf("parent process id: %d\n", getppid()); return 0; e) Tạo tiến trình Dùng hàm: pid_t fork(void); Nếu thành công, trả về 0 : process con N>0 là Pid của process cha. Nếu thất bại, trả về -1 và lý do: ENOMEM: không đủ bộ nhớ EAGAIN: số process vượt quá giới hạn cho phép

Ví dụ 3: tạo tập tin fork1.c #include <unistd.h> int main() { int childid; if ((childid=fork())==0) { printf("child process output: PID = %d\n",getpid()); else if(childid > 0) { printf("parent process output: PID= %d\t", getpid()); printf("child PID=%d\n", childid); else { printf("fork error!\n"); exit(1); return 0; Ví dụ 4: tạo tập tin fork2.c #include <sys/types.h> #include <unistd.h> #include <stdlib.h> int main() { pid_t pid; char *message; int n; printf( fork program starting\n ); pid = fork(); switch(pid) { case -1: perror( fork failed ); exit(1); case 0: message = This is the child ; n = 5; break; default:

message = This is the parent ; n = 3; break; for(; n > 0; n--) { puts(message); sleep(1); exit(0); f) Kết thúc tiến trình Dùng system call exit() o Orphaned process: process cha kết thúc trước process con sau đó sẽ có cha là init (PID=1) o Zombied process: Process kết thúc nhưng chưa báo trạng thái cho process cha biết. Dùng hàm wait() hay waitpid() ở process cha để lấy trạng thái trả về từ process con Dùng waitpid()system call #include <sys/types.h> #include <sys/wait.h> pid_t waitpid(pid_t pid, int *stat_loc, int options); (Trả về PID của process con kết thúc, hoặc -1 nếu thất bại) o Đối số pid: o <-1: Đợi các process con có process group ID bằng với PID của nó o =-1: Đợi bất kỳ các process con nào o =0:Đợi bất kỳ các process con nào có process group ID bằng với PID của nó. o > 0: Đợi pocess có PID bằng với giá trị này

B. BÀI TẬP I. SHELL 1. Viết một shell script đổi tên tất cả tập tin trong thư mục bằng cách nối thêm một số tăng dần sau tên tập tin, giả sử tên tập tin không có phần mở rộng. Gợi ý: #!/bin/bash # This script finds the list of files in a directory and echoes # each filename with an incremental number appended # instead of echo, we can also use mv to rename filenames i=0 # bash for loop for f in $( ls.); do let i=$i+1 echo "we found the following file: " $f newfile=$f"_"$i echo we found the following file: $newfile done 2. Viết một shell script nhận 3 tham số dòng lệnh là 3 số bất kỳ, in ra số lớn nhất. Shell script in ra thông báo lỗi nếu thiếu một trong 3 tham số. 3. Viết một shell script nhận 3 tham số dòng lệnh Tham số thứ nhất $1: một số bất kỳ Tham số thứ hai $2: một trong các phép toán: + - / * Tham số thứ ba $3: một số bất kỳ Khi thực thi, nếu nhập 3 đối số thì Script in ra kết quả của phép tính tương ứng, ngược lại nếu thiếu một trong các đối số thì in ra thông báo lỗi. 4. Sử dụng lệnh echo và read để viết chương trình in ra menu sau : 1) UNIX 2) Solaris 3) Free BSD 4) Windows 5) Other Xin chọn 1 mục (1..5) : Khi nhập vào 1 trong các mục chọn trên thì hiển thị thông báo chọn mục nào. Nếu nhập sai sẽ in thông báo lỗi. Ví dụ : khi bạn nhập vào số 4 sẽ xuất hiện dòng thông báo sau : You have selected Windows 5. Sử dụng shell script viết chương trình in các tham số dòng lệnh theo thứ tự ngược 6. Viết 1 shell script theo cú pháp MCP1 <file> [<file> ] <TM>

II. Thực hiện copy nhiều <file> vào 1 <thư mục> Kiểm tra có tối thiểu 2 tham số trên dòng lệnh Kiểm tra sự tồn tại của <file>, nếu không có thông báo trên màn hình rồi chạy tiếp cho <file khác> Kiểm tra sự tồn tại của <TM>, nếu không có hỏi user cần tạo? Lập trình C - Quản lý tiến trình 1. Thực hiện các lệnh sau và giải thích ý nghĩa của mỗi lệnh trong lab_report ps ax ps l //xem độ ưu tiên của tiến trình Dùng lệnh renice <độ ưu tiên> <PID> thay đổi độ ưu tiên của tiến trình xem lại kết quả 2. Tạo tiến trình mới: có thể tạo một chương trình bên trong một chương trình khác (tạo tiến trình mới) bằng cách sử dụng hàm system(). Hãy viết chương trình sử dụng hàm system() để thực hiện lệnh ps ax theo hướng dẫn bên dưới, giải thích kết quả #include <stdlib.h> int main() { printf( Running ps with system\n ); system( ps ax ); printf( Done.\n ); exit(0); 3. Nhóm hàm exec: Thay thế tiến trình hiện tại bằng một tiến trình mới với không gian nhớ có sẵn của tiến trình ban đầu- SV tự tìm hiểu về các hàm trong nhóm exec. Hiện thực chương trình sau, so sánh kết quả trong câu 2 và nhận xét. #include <unistd.h> #include <stdlib.h> int main() { printf( Running ps with execlp\n ); execlp( ps, ps, ax, 0); printf( Done.\n ); exit(0); 4. Thực hiện các ví dụ 1 đến ví dụ 5, giải thích ý nghĩa của từng ví dụ trong lab

5. Trong ví dụ 4, tiến trình cha kết thúc trước so với tiến trình con. Hãy sử dụng hàm wait() để hiệu chỉnh chương trình trong ví dụ 4, sao cho tiến trình cha chờ tiến trình con kết thúc trước. In ra ID của tiến trình con và exit code của tiến trình con xác nhận tiến trình con kết thúc bình thường. //wait for the child process to finish. if (pid!= 0) { int stat_val; pid_t child_pid; child_pid = wait(&stat_val); printf( Child has finished: PID = %d\n, child_pid); if(wifexited(stat_val)) printf( Child exited with code %d\n,wexitstatus(stat_val)); else printf( Child terminated abnormally\n ); exit(exit_code); WIFEXITED(stat_val) 0 nếu tiến trình con kết thúc bình thường WEXITSTATUS(stat_val): o Nếu WIFEXITED 0 thì WEXITSTATUS trả về exit code của tiến trình con.