bash – GNU屏幕问题
我试图以一种特殊的方式运行屏幕(我正在制作一个不寻常的脚本),但它无法正常工作.
我的剧本: #!/bin/bash #startserver set -m cd /home/USER/SERVER_FOLDER/ screen -Dm -S SERVER java -Xmx768M -Xms768M -jar ./JARFILE.jar $@ & PID=$! echo $PID > ./.mc.pid (sleep 0.5; sudo /usr/bin/oom-priority $PID) & (wait $PID; startserver_after) & screen -r $PID.SERVER /usr/bin/oom-priority是我做的一个coommand,它将pid的优先级设置为-16. startserver_after是我想在java退出后运行的命令. 这不起作用,因为我无法恢复屏幕.查看屏幕联机帮助页: -D -m This also starts screen in "detached" mode,but doesn't fork a new process. The command exits if the session terminates. 这应该意味着: >屏幕的pid应该与java相同,但是可行. 当我在没有&符号的情况下运行该行并将其放在后台时,它只会在java退出之前无效.没有输出. 解决方法
如果你使用-Dm运行屏幕,它将不会返回到你的命令行提示符(“无分叉”的想法;这就是为什么它没有做任何事情,直到你的java退出,如果你没有&符号).如果使用-dm运行它,它会立即返回到命令行提示符.
通过将-Dm放在后台,你已经使它分叉并设置$!使用屏幕进程的PID.这很好. 您正在设置屏幕的优先级(我怀疑您是否想要这样做;我认为您的目标是Java).你可以得到你孩子的pid,像这样: pidchild=$(pgrep -P $PID) 屏幕退出后你真的想要startserver_after吗?也许你想等孩子. 关于屏幕-r最后:它应该工作,除非你没有tty作为脚本的stdin,或者java已经退出.在屏幕-r后立即尝试ps -p $pidchild,看看孩子是否还活着.同时运行tty作为脚本的最后一个命令,并确保它不返回Not a tty. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |