Với chương trình này hack.c:bash trap của TERM - tôi đang làm gì sai?
#include <stdio.h>
main()
{
int i=0;
for(i=0; i<100; i++) {
printf("%d\n", i);
sleep(5);
}
}
và kịch bản này bash hack.sh:
#!/bin/bash
./hack
Nếu tôi chạy hack.sh, hai quá trình được tạo ra - một cho bash, một cho C nhiệm vụ. Nếu tín hiệu TERM được gửi đến quá trình bash, quá trình C sẽ không bị hấn gì.
Bây giờ, giả sử bash gốc đã được khởi chạy từ một chương trình Java sử dụng Runtime.exec(), vì vậy điều khiển duy nhất tôi có trên đó là Process.destroy() (gửi TERM tới quy trình bash)? Giả sử tôi muốn quy trình C chết cùng với bash đã khởi chạy nó?
Tôi đã cố gắng mọi thứ như thế này trong bash:
#!/bin/bash
trap "kill -TERM -$$; exit" TERM
./hack
tức là một khoản bẫy mà bắt tín hiệu TERM và phát lại nó vào nhóm toàn bộ quá trình. Điều này không hiệu quả đối với tôi - quy trình bash với mệnh đề bẫy đó trong đó bỏ qua tín hiệu TERM.
Tôi thiếu gì ở đây?
Trang người đàn ông của bash nói: Nếu bash đang chờ lệnh hoàn thành và nhận được tín hiệu mà bẫy đã được đặt, bẫy sẽ không được thực hiện cho đến khi lệnh hoàn tất. – tangens
Bạn đã thử sử dụng 'exec' thay vì giữ lại quá trình shell chưa? –
Bạn đúng, tangens. Lý do duy nhất của tôi là văn bản nằm trong phần SIGNALS, phía trên tài liệu bẫy. Cảm ơn! –