tôi đến trễ để trả lời, nhưng đây là cách tôi làm điều đó:
const char *progname = "./yourProgName";
const char *argument1 = "arg1";
const char *argument2 = "arg2";
if (fork() == 0)
{
// We are the child process, so replace the process with a new executable.
execl(progname, progname, argument1, argument2, (char *)NULL);
}
// The parent process continues from here.
Trước tiên, bạn fork() quá trình này để tạo ra một quy trình mới. Nó vẫn có cùng một không gian bộ nhớ như cũ. fork() trả về cho cả quá trình cha và con. Nếu fork() trả về 0, bạn là tiến trình con. Quá trình con sau đó sử dụng execl() để thay thế bộ nhớ tiến trình bằng một từ một tệp mới.
Lưu ý rằng progname được cấp hai lần cho execl(). Đầu tiên là những gì execl() thực sự sẽ cố gắng chạy, thứ hai là argv [0]. Bạn phải cung cấp cả hai hoặc đếm đối số sẽ bị tắt bởi một. Progname phải chứa tất cả thông tin đường dẫn cần thiết để tìm hình ảnh thực thi mong muốn.
Tôi đưa ra hai đối số trong ví dụ này, nhưng bạn có thể chuyển bao nhiêu tùy ý. nó phải được chấm dứt bằng NULL, và tôi nghĩ rằng bạn phải cast nó như là (char *) như tôi hiển thị.
Cách tiếp cận này cung cấp cho bạn quy trình hoàn toàn độc lập với các đối số và một pid duy nhất. Nó có thể tiếp tục chạy lâu sau khi quá trình cha mẹ chấm dứt, hoặc nó có thể chấm dứt trước khi cha mẹ.
'fork' tạo bản sao của quy trình đang diễn ra, quá trình này không * khởi tạo * một quy trình. – Beta
Đọc http://advancedlinuxprogramming.com/ –