fork(): Tạo tiến trình con (child) sao chép tiến trình cha (parent).
- Child có PID riêng
- PPID của child = PID của parent
- Không kế thừa lock/semaphore
Trả về: PID child (ở parent), 0 (ở child), -1 (lỗi).
exec(): Thay thế tiến trình hiện tại bằng chương trình mới. Load chương trình vào bộ nhớ, chạy từ entry point.
Khác biệt chính: fork tạo bản sao chạy song song; exec thay thế tiến trình hiện tại.
Ví dụ fork + exec
pid_t pid = fork();
if (pid == 0) {
// Child
char* argv[] = {"ls", "-lart", "/home", NULL};
execv("ls", argv);
exit(0);
} else {
// Parent
waitpid(pid, &status, 0);
// Kiểm tra status...
}