加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – GNU屏幕问题

发布时间:2020-12-15 22:34:59 所属栏目:安全 来源:网络整理
导读:我试图以一种特殊的方式运行屏幕(我正在制作一个不寻常的脚本),但它无法正常工作. 我的剧本: #!/bin/bash#startserverset -mcd /home/USER/SERVER_FOLDER/screen -Dm -S SERVER java -Xmx768M -Xms768M -jar ./JARFILE.jar $@ PID=$!echo $PID ./.mc.pid(sl
我试图以一种特殊的方式运行屏幕(我正在制作一个不寻常的脚本),但它无法正常工作.

我的剧本:

#!/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相同,但是可行.
>它仍然是屏幕,所以我应该可以通过屏幕-r SERVER(但我不能)到达它.

当我在没有&符号的情况下运行该行并将其放在后台时,它只会在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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读