2010-10-01 40 views

Trả lời

12

Tôi nghĩ rằng hành động nhanh và bẩn là gọi sytem (lệnh &). & sẽ sinh ra quy trình mới.

+0

Tuyệt đối +1. 'system()' là nền tảng phụ thuộc anyway. Thay vì tạo một mớ hỗn độn của nguồn của bạn bằng 'fork()' hoặc các công cụ như thế, hãy sử dụng hệ vỏ mà 'system()' cung cấp cho bạn quyền truy cập vào. – DevSolar

+0

giải pháp tuyệt vời tốt hơn nhiều so với ngã ba nếu bạn aks tôi –

8

Sử dụng fork() để tạo quy trình mới và sau đó sử dụng system() (hoặc bất kỳ chức năng exec) nào trong đó. Quá trình ban đầu sẽ có thể tiếp tục thực hiện.

6

Bạn có thể muốn sử dụng popen. Nó tạo ra các quy trình mới và cho phép bạn chuyển hướng đầu ra của quy trình tới quy trình của riêng bạn.

3

Nếu trong cửa sổ, hãy sử dụng chức năng ShellExecute() từ API Windows.

Nếu trong Unix, hãy truy cập fork() rồi system() như đã đề cập.

7

Câu trả lời phụ thuộc vào mục tiêu thực sự của bạn là gì. Bạn không nói những gì bạn đang ở trên nền tảng, và tôi biết rất ít về Windows, do đó, điều này chỉ bao gồm các tùy chọn của bạn trên linux/unix.

  1. Bạn chỉ muốn tạo chương trình khác và không cần tương tác với chương trình đó. Trong trường hợp này, hãy gọi fork() và sau đó trong quá trình con chạy execve() (hoặc chức năng liên quan).

  2. Bạn muốn tương tác với một chương trình khác. Trong trường hợp này, hãy sử dụng popen().

  3. Bạn muốn một phần chương trình của mình chạy dưới dạng tiến trình con. Trong trường hợp này, hãy sử dụng fork() và gọi bất kỳ chức năng nào bạn cần để chạy trong trẻ.

  4. Bạn cần tương tác với một phần của chương trình đang chạy dưới dạng tiến trình con. Hãy gọi pipe() để bạn có bộ mô tả tệp để giao tiếp, sau đó gọi fork() và sử dụng cặp mô tả tệp để giao tiếp. Ngoài ra, bạn có thể giao tiếp thông qua một ổ cắm, hàng đợi tin nhắn, bộ nhớ dùng chung, v.v.

+0

Đẹp tóm tắt của các tùy chọn ở bàn tay, và làm thế nào để lựa chọn giữa chúng. –

+0

'fork()' sau đó 'system()' sẽ để lại một quá trình vô ích treo xung quanh cho vỏ để kết thúc. Tốt hơn là gọi 'execve()' hoặc tương tự trong tiến trình con thay vì 'system()'. Nếu bạn muốn sử dụng các tính năng của trình bao, thì hãy thực hiện lệnh '/ bin/sh'. – jilles

+0

@jilles - Tốt, cảm ơn. Đã chỉnh sửa để sửa. – bstpierre

Các vấn đề liên quan