Tôi có một đĩa CD trực tiếp khởi động vào Linux và chạy một đoạn script Bash nhỏ. Kịch bản tìm kiếm và chạy chương trình thứ hai (thường là tệp nhị phân C ++ được biên dịch).
Bạn được cho là có thể hủy bỏ chương trình thứ hai bằng cách nhấn Ctrl+ C. Điều nên xảy ra là chương trình thứ hai tạm dừng và tập lệnh Bash tiếp tục chạy dọn dẹp. Điều thực sự xảy ra là cả ứng dụng chính và tập lệnh Bash đều chấm dứt. Đó là một vấn đề.
Vì vậy, tôi đã sử dụng trap
nội dung để nói với Bash bỏ qua SIGINT. Và bây giờ Ctrl+ Cchấm dứt ứng dụng C ++, nhưng Bash vẫn tiếp tục chạy. Tuyệt quá.
Ồ vâng ... Đôi khi "ứng dụng thứ hai" là một tập lệnh Bash khác. Và trong trường hợp đó , Ctrl+ Cbây giờ không làm gì cả .
Rõ ràng sự hiểu biết của tôi về cách thức hoạt động của công cụ này là sai ... Làm cách nào để kiểm soát quá trình nào bị SIGINT khi người dùng nhấn Ctrl+ C? Tôi muốn hướng tín hiệu này đến một quy trình cụ thể .
set -m
. Nó sạch sẽ và đơn giản hơn một chút so với việc sử dụngsetsid
mỗi khi bạn chạy trẻ.