Tôi đã xem các chương trình giám sát hoặc trong các kịch bản kiểm tra tình trạng quá trình sử dụng 'ps' hoặc 'tình trạng dịch vụ (trên Linux)' định kỳ, hoặc trong C/C++ mà dĩa và chờ ... Quá trình này ...bash khởi động lại quá trình con bằng cách sử dụng bẫy SIGCHLD?
I tự hỏi nếu nó có thể sử dụng bash với bẫy và khởi động lại quá trình con khi SIGCLD nhận được?
tôi đã thử nghiệm một bộ cơ bản trên RedHat Linux với sau ý tưởng (và chắc chắn nó đã không làm việc ...)
#!/bin/bash
set -o monitor # can someone explain this? discussion on Internet say this is needed
trap startProcess SIGCHLD
startProcess() {
/path/to/another/bash/script.sh & # the one to restart
while [ 1 ]
do
sleep 60
done
}
startProcess
những gì kịch bản bash được bắt đầu chỉ ngủ trong vài giây và thoát cho hiện nay.
một số vấn đề quan sát:
- khi vỏ bắt đầu trong foreground, SIGCHLD sẽ được xử lý chỉ một lần. bẫy đặt lại tín hiệu xử lý như tín hiệu()?
- tập lệnh và con của nó dường như miễn nhiễm với SIGINT, có nghĩa là chúng không thể bị dừng lại bởi^C
- vì không thể đóng được, tôi đã đóng thiết bị đầu cuối. Kịch bản dường như là HUP và nhiều trẻ em bị bỏ rơi.
- khi chạy ở chế độ nền, kịch bản gây ra thiết bị đầu cuối để chết
... dù sao, điều này không làm việc ở tất cả. Tôi phải nói rằng tôi biết quá ít về chủ đề này. Ai đó có thể đề xuất hoặc đưa ra một số ví dụ làm việc? Có tập lệnh nào để sử dụng như vậy không?
làm thế nào để sử dụng chờ trong bash?
Cảm ơn
Cảm ơn Jimmy, vì đã chia sẻ và thậm chí đã thử nghiệm kịch bản khủng khiếp. Tôi đã ngừng nỗ lực, sử dụng cách 'truyền thống' để làm điều đó - một vòng lặp và kiểm tra một. Tuy nhiên, tôi đã thử nghiệm "chờ", nó thực sự hoạt động rất tốt trong các tình huống cơ bản. ! '#/Bin/bash thepid = 0 stopnow = 0 set -o dõi bẫy dọn dẹp SIGINT SIGTERM dọn dẹp() { bẫy - SIGINT SIGTERM stopnow = 1 nếu [$ {} thepid -ne 0] sau đó vang giết $ {} thepid kill $ {} thepid fi } khi [$ {} stopnow -ne 1] làm echo bắt đầu ./trial.sh & thepid = $! echo "đang chờ $ {thepid}" chờ $ {thepid} được thực hiện thoát 0 ' –