2010-06-22 31 views
60

Làm cách nào để triển khai fork và exec trong bash?fork and exec in bash

Chúng ta kịch bản giả sử như

echo "Script starts" 

function_to_fork(){ 
sleep 5 
echo "Hello" 
} 

echo "Script ends" 

Về cơ bản tôi muốn chức năng đó được gọi là quá trình mới như trong C chúng tôi sử dụng nĩa và exec cuộc gọi ..

Từ kịch bản đó là mong rằng các tập lệnh mẹ sẽ kết thúc và sau 5 giây, "Hello" được in.

Trả lời

105

Sử dụng dấu và giống như bạn sẽ từ vỏ.

#!/usr/bin/bash 
function_to_fork() { 
    ... 
} 

function_to_fork & 
# ... execution continues in parent process ... 
+2

Điều này là không chính xác giống như "ngã ba". Tôi kiểm tra một số lệnh bằng cách sử dụng fork trong C hoặc Ruby, và nó chạy tốt. Nhưng bằng cách sử dụng "&" như trên, nó không thành công. – user180574

+0

Đẹp, nhưng ... tôi thường thất bại khi tôi cố gắng sử dụng một chức năng. Tôi sử dụng một tập lệnh riêng và gọi nó. Linh hoạt hơn nhiều. Chức năng chuyển hướng và nền là trực quan hơn và có thể được kiểm tra dễ dàng hơn từ dòng lệnh. – nroose

29

Làm thế nào về:

(sleep 5; echo "Hello World") & 
+0

Đó là chờ đợi và chờ – Brian

+0

@staticx Có nghĩa là quá trình này sẽ kết thúc, nhưng cha mẹ sẽ không tiếp tục thực hiện cho đến khi '()' trả về? – msanford

+0

@Brian này không chờ đợi cho tôi, chỉ dĩa – BryanK