SH: ошибка «прерванный системный вызов» при убийстве дочернего процессаLinux

Ответить
Anonymous
 SH: ошибка «прерванный системный вызов» при убийстве дочернего процесса

Сообщение Anonymous »

У меня есть следующий скрипт оболочки: < /p>

Код: Выделить всё

#!/usr/bin/env sh

PIPE_PATH="/tmp/mypipe"

test -p "${PIPE_PATH}" || mkfifo "${PIPE_PATH}"

processCommandsFromPipe() {
local pipe="${PIPE_PATH}"

while true; do
while read command; do
nohup setsid sh -c "${command}" >/dev/null 2>&1 &
commandPID=$!
echo "PID: ${commandPID}"
sleep 1
done < "${pipe}"

if [ ! -p "${pipe}" ]; then
exit 0
fi
done
}

processCommandsFromPipe &
PIPE_PROCESS=$!

cleanup() {
echo CLEANUP
trap - EXIT
if kill -0 "${PIPE_PROCESS}" >/dev/null 2>&1; then
kill "${PIPE_PROCESS}"
fi
rm -f "${PIPE_PATH}"
exit
}

read

cleanup
< /code>
открывает трубу, считывает из нее и порождает фоновый процесс любой команды, записанной. < /p>
После запуска сценария я пишу Команда трубы в другой оболочке: < /p>
echo "cat /dev/zero" > /tmp/mypipe
< /code>
Скрипт правильно выводит PID: < /p>
PID: 95522
< /code>
Затем я убиваю процесс: < /p>
kill 95522
< /code>
А теперь мой скрипт показывает ошибку: < /p>
bin/test.sh: line 11: can't open /tmp/mypipe: Interrupted system call
< /code>
Сценарий продолжается нормально, однако. Я все еще могу написать другие команды в трубу, и они будут порождены правильно. < /P>
может кто -нибудь объяснить, почему появляется это сообщение? Я не трогал трубку, я только что убил порожденный подпроцесс. В моем понимании это не должно влиять на это.
Как я могу избавиться от сообщения? Код>, кстати. Если я выполняю скрипт с помощью Bash 
, ошибка не отображается.


Подробнее здесь: https://stackoverflow.com/questions/794 ... ld-process
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»