У меня есть небольшая проблема, возможно, это глупый вопрос, но я начал изучать bash около недели назад ... У меня есть 2 сценария, a.sh и b.sh. Мне нужно, чтобы оба работали постоянно. b.sh должен ждать сигнала от a.shотправить сигнал между сценариями (bash)
(Я пытаюсь объяснить: a.sh и b.sh run -> a.sh посылает сигнал на b.sh -> b. sh traps signal, делает что-то -> a.sh делает что-то еще, а затем посылает другой сигнал -> b.sh ловушки, делает что-то -> и т. д.)
Это то, что я пробовал:
a.sh:
#!/bin/bash
./b.sh &;
bpid=$!;
# do something.....
while true
do
#do something....
if [ condition ]
then
kill -SIGUSR1 $bpid;
fi
done
b.sh:
#!/bin/bash
while true
do
trap "echo I'm here;" SIGUSR1;
done
Когда я запускаю a.sh, я не получаю выход из b.sh, даже если я перенаправляю стандартный вывод в файл ... Однако, когда я запускаю b.sh в фоновом режиме из моей оболочки bash, это кажется, отвечает на мой SIGUSR1 (отправляется с той же командой, непосредственно из оболочки) (я получаю правильный вывод) Что мне не хватает?
EDIT: это простой пример, который я пытаюсь запустить:
a.sh:
#!/bin/bash
./b.sh &
lastpid=$!;
if [ "$1" == "something" ]
then
kill -SIGUSR1 $lastpid;
fi
b.sh:
#!/bin/bash
trap "echo testlog 1>temp" SIGUSR1;
while true
do
wait
done
я не могу получить файл «temp» при запуске a.sh. Однако, если я исполню ./b.sh &
и затем kill -SIGUSR1 PIDOFB
вручную, все работает отлично ...
Также вам не нужно устанавливать ловушку повторно. Достаточно один раз. И петля в таком виде будет абсолютно ** сжигать ** через процессор. Вы должны обязательно добавить короткий сон там. –
спасибо за ответы. Да, я знаю, просто ошибка записи, в моем тестовом скрипте у меня есть $ lastpid, я скучаю, чтобы переименовать оба здесь ... Может ли b.sh работать в фоновом режиме без выхода, если он содержит только ловушку без цикла? И поймать более одного сигнала? – Milite
Другая ошибка, которую я предполагаю, заключается в том, что './b.sh &;' недопустим. У вас не может быть как '&', так и ';' в качестве таких терминаторов. При построении минимального тестового примера вы должны быть осторожны, чтобы правильно воспроизвести ваш фактический случай. Вы проверили этот минимальный случай, чтобы узнать, есть ли у него такая же проблема, как и ваш реальный случай? –