Вывод вывода фонового процесса в переменную Shell

Я хочу получить вывод команды / скрипта в переменную, но процесс запускается в фоновом режиме. Я попытался, как показано ниже, и несколько серверов запустили его правильно, и я получил ответ. Но в немногих я получаю i_res как пустой.

Я пытаюсь запустить его в фоновом режиме, так как у команды есть шанс войти в состояние зависания, и я не хочу зависать родительский скрипт.

Надеюсь, я скоро получу ответ.

#!/bin/ksh

x_cmd="ls -l"

i_res=$(eval $x_cmd 2>&1 &)

k_pid=$(pgrep -P $$ | head -1)

sleep 5
c_errm="$(kill -0 $k_pid 2>&1 )"; c_prs=$?

if [ $c_prs -eq 0 ]; then

    c_errm=$(kill -9 $k_pid)

fi

wait $k_pid

echo "Result : $i_res"

1 ответ

Попробуйте что-то вроде этого:

#!/bin/ksh


pid=$$                      # parent process
(sleep 5 && kill $pid) &    # this will sleep and wake up after 5 seconds        
                            # and kill off the parent.
termpid=$!                  # remember the timebomb pid
# put the command that can hang here
result=$( ls -l )
                            # if we got here in less than 5 five seconds:
kill $termpid               # kill off the timebomb
echo "$result"              # disply result
exit 0

Добавьте все необходимые сообщения в код. В среднем это будет выполнено намного быстрее, чем всегда с утверждением сна. Вы можете увидеть, что он делает, выполнив команду sleep 6 вместо ls -l

Другие вопросы по тегам