我有一些奇怪的行为,我有一个csh文件,它运行java进程,如下所示:
run_server.csh
#!/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&,我得到了这样的消息:
[2] + Suspended (tty output) run_server.csh
虽然当我运行它时没有使用与号,服务器正在运行并将其日志消息输出到标准输出中,但问题是当我按下ctr+c时,该进程被终止
另一件奇怪的事情是,如果我向run_server.csh编写包装器脚本,它看起来像这样的run_server_wrapper.csh:
#!/usr/bin/tcsh
run_server.csh &
sleep 5
它会以bg进程的身份运行服务器,并让run_server_wrapper.csh自己获取消息:
[2] + Suspended (tty output) run_server_wrapper.csh
这里的问题是什么?
发布于 2014-08-08 03:03:33
发生的情况是,您将进程放在后台,但它仍在写入终端。终端驱动程序不赞成这种行为,并在尝试写入TTY时暂停进程。当然,显而易见的答案是停止这样做。如果你把run_server.csh
放到后台,你也应该重定向输出,如下所示:
run_server.csh > /path/to/serverlog 2>&1 &
如果您希望程序在后台运行,并且仍然希望看到输出,通常的解决方案是将输出重定向到日志文件,然后使用tail
命令监视日志文件。
tail -f /path/to/serverlog
如果你真的,真的想让一些东西在后台运行,并且仍然能够写入TTY,那么关闭tostop
标志。
stty -tostop
发布于 2018-10-03 14:14:07
除了This isn't my real name有用的答案之外,还有一个补充:
如果您放入后台的进程需要用户输入,那么它将被挂起,直到您提供输入。
https://stackoverflow.com/questions/25186178
复制相似问题