首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Linux csh脚本在使用& (bg)运行时将挂起(tty输出)

Linux csh脚本在使用& (bg)运行时将挂起(tty输出)
EN

Stack Overflow用户
提问于 2014-08-07 23:17:12
回答 2查看 7.9K关注 0票数 2

我有一些奇怪的行为,我有一个csh文件,它运行java进程,如下所示:

run_server.csh

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/tcsh

java -Dtest=testparam -cp ${TEST}/lib/device.jar:${TEST}/conf:${TEST}/lib/commons-logging-1.1.1.jar  com.device.server

当我像这样运行它时:在linux的putty shell中运行run_server.csh&,我得到了这样的消息:

代码语言:javascript
代码运行次数:0
运行
复制
[2]  + Suspended (tty output)        run_server.csh

虽然当我运行它时没有使用与号,服务器正在运行并将其日志消息输出到标准输出中,但问题是当我按下ctr+c时,该进程被终止

另一件奇怪的事情是,如果我向run_server.csh编写包装器脚本,它看起来像这样的run_server_wrapper.csh:

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/tcsh 
run_server.csh &
sleep 5

它会以bg进程的身份运行服务器,并让run_server_wrapper.csh自己获取消息:

代码语言:javascript
代码运行次数:0
运行
复制
[2]  + Suspended (tty output)        run_server_wrapper.csh

这里的问题是什么?

EN

回答 2

Stack Overflow用户

发布于 2014-08-08 03:03:33

发生的情况是,您将进程放在后台,但它仍在写入终端。终端驱动程序不赞成这种行为,并在尝试写入TTY时暂停进程。当然,显而易见的答案是停止这样做。如果你把run_server.csh放到后台,你也应该重定向输出,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
run_server.csh > /path/to/serverlog 2>&1 &

如果您希望程序在后台运行,并且仍然希望看到输出,通常的解决方案是将输出重定向到日志文件,然后使用tail命令监视日志文件。

代码语言:javascript
代码运行次数:0
运行
复制
tail -f /path/to/serverlog

如果你真的,真的想让一些东西在后台运行,并且仍然能够写入TTY,那么关闭tostop标志。

代码语言:javascript
代码运行次数:0
运行
复制
stty -tostop
票数 5
EN

Stack Overflow用户

发布于 2018-10-03 14:14:07

除了This isn't my real name有用的答案之外,还有一个补充:

如果您放入后台的进程需要用户输入,那么它将被挂起,直到您提供输入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25186178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档