将后台进程输出输出到Shell变量

时间:2015-08-06 18:08:10

标签: shell background-process ksh output-redirect

我希望将命令/脚本输出到变量,但是会触发该过程在后台运行。我尝试如下,很少有服务器正确运行它,我得到了响应。但是很少有人让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 个答案:

答案 0 :(得分: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

来查看其功能