我需要一些关于linux中作业控制的帮助。
我在终端上运行我的程序,就像这个
$ ./test.elf &
然后,我的程序/进程将作为后台进程运行。
过了一段时间(比如说5秒钟),我键入fg
将我的进程置于前台。
过了一段时间(比如说5秒钟),我希望我的程序回到后台进程,并将bash程序作为前台进程,这样我就可以继续使用终端了。
我是这样做的:
- 启动pprogram时,我使用
tcgetpgrp
函数获取前台进程(bash程序)的组进程id - 然后我等待,直到我的进程是前台进程。我使用
tcgetpgrp(STDIN__FILENO)
- 然后我等待约5秒
- 使用
tcsetpgrp
,我将上面第1点中得到的过程放在前台
问题是,我可以看到我的进程被放在后台,bash程序被放在前台,但我无法在终端中输入命令。bash没有"返回",它仍然在等待或睡觉。
我知道我可以按Ctrl-z,然后按bg
,但我不想使用它,因为在按下
如果我对问题的描述令人困惑,我很抱歉。
有什么意见吗?
我必须承认,如果这是您正在寻找的解决方案,我不是100%,但使用GNU Screen实用程序呢?你的应用程序可以在一个屏幕上运行,而你在另一个屏幕中有一个可用的终端。在屏幕之间切换就像一个键盘快捷键一样简单。GNU屏幕的文档可以在这里找到。
另一个选项可能是disown命令(据我所知,仅在Bash中可用)。它可以让你把一个进程放在后台运行,这里有一些文档。
您可以在脚本中添加以下内容。当你在后台处理时,它会给你5秒钟的终端时间。
timelimit=5; ## The time limit in seconds
NEW_PROMPT_COMMAND="; if [[ \$SECONDS -gt $timelimit ]]; then echo \"---Timelimit hit, shutting down shell---\"; flush_keyboard_buffer; exit; fi";
touch ~/.bashrc_timelimit;
cp ~/.bashrc ~/.bashrc_timelimit;
(cat ~/.bashrc; echo -e "nPROMPT_COMMAND+="$NEW_PROMPT_COMMAND"") > ~/.bashrc_timelimit;
bash --rcfile ~/.bashrc_timelimit;
试试这个运行脚本来理解击球手-
function pause(){
read -n 1 -p "$*"
}
clear
until [ "selection" = "0" ] ; do
echo " "
echo -e 'ttt' "Unix Helper Utility"
echo -e 'ttt' "==================="
echo " "
echo "[1] List File names in current directory"
echo "[2] Show Time and Date"
echo "[3] Process ID"
echo "[4] Send this menu to Background"
echo "[0] Exit"
echo " "
echo "Please pick an option listed above: "
read selection
echo " "
case $selection in
1 ) clear
echo " Current Directory list:"
ls
pause
clear ;;
2 ) clear
date
pause
clear ;;
3 ) clear
echo "option 3"
pause
clear ;;
4 ) clear
timelimit=5; ## The time limit in seconds
NEW_PROMPT_COMMAND="; if [[ \$SECONDS -gt $timelimit ]]; then echo \"---Timelimit hit, shutting down shell---\"; flush_keyboard_buffer; exit; fi";
touch ~/.bashrc_timelimit;
cp ~/.bashrc ~/.bashrc_timelimit;
(cat ~/.bashrc; echo -e "nPROMPT_COMMAND+="$NEW_PROMPT_COMMAND"") > ~/.bashrc_timelimit;
bash --rcfile ~/.bashrc_timelimit;
clear ;;
0 ) clear
exit
esac
done