繁体   English   中英

使用模拟的ctrl-c从子进程重定向shell脚本中的输出

[英]Redirecting output in shell script from subprocess with simulated ctrl-c

我正在开发一个shell脚本,它在其中设置一些参数并调用python脚本。 有时python脚本挂起,当我按ctrl-c时,它会生成一些错误输出。 我正在尝试将此写入文件。 当我执行shell脚本并按ctrl-c时,会在重定向文件中获得输出,但是如果我尝试通过休眠一段时间并终止进程来模拟ctrl-c,则输出不会重定向至文件。 我已经从SO中使用了一些示例来进行睡眠并终止工作,但是输出文件没有我从ctrl-c操作手动获得的错误。

我无法更改此脚本正在执行的python脚本,因此我必须在调用脚本中实现它。

[ -z "$1" ] && echo "No environment argument supplied" && exit 1
. env_params.txt
. run_params.txt


echo "========================================================== RUN STARTED AT $B =========================================================="  >> $OUTFILE
echo "    " >> $OUTFILE

export RUN_COMMAND="$PYTHON_SCRIPT_LOC/pyscript.py PARAM1=VALUE1 PARAM2=VALU2 PAram3=value3"

echo "Run command from test.sh $RUN_COMMAND"    >> $OUTFILE
echo "    " >> $OUTFILE
echo "    " >> $OUTFILE
echo "========================================================== Running Python script =========================================================="  >> $OUTFILE

echo "Before python command"

###############################################
( python $RUN_COMMAND  >> $OUTFILE  2>&1  )  & pid=$!

   SLEEP_TIME=1m
   echo "before sleep - sleeping for $SLEEP_TIME $pid"
   ( sleep $SLEEP_TIME && kill -HUP $pid ) 2>/dev/null & watcher=$!
   if wait $pid 2>/dev/null; then
   echo "after sleep - sleeping for $SLEEP_TIME $pid"
      echo "your_command finished"
      pkill -HUP -P $watcher
      wait $watcher
   else
       echo "after sleep - sleeping for $SLEEP_TIME $pid"
       echo "your_command interrupted"
   fi

### also tried this - did not work either
### python $RUN_COMMAND  >> $OUTFILE  2>&1 &; (pythonPID=$! ; sleep 1m ;kill -s 2 $pythonPID) 
 .
 .

我需要进行哪些更改,以便在脚本本身中终止该进程时将输出写入$ OUTFILE,而不是在终端上按ctrl-c?

可能您不想使用SIGHUP (在控制终端或控制过程终止时检测到的挂断,而是

SIGINT        2       Term    Interrupt from keyboard

有关更多信息,请阅读man 7 signal

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM