我有奇怪的行为我有运行java进程的csh文件,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
当我像这样运行它:run_server.csh&在linux中的putty shell中我得到这个按摩:
[2] + Suspended (tty output) run_server.csh
Run Code Online (Sandbox Code Playgroud)
虽然当我运行它没有&符号服务器正在运行并将其日志按摩输出到stdout但问题是当我按ctr + c时,进程被杀死
另一个奇怪的事情是,如果我将包装脚本写入run_server.csh,看起来像这样run_server_wrapper.csh:
#!/usr/bin/tcsh
run_server.csh &
sleep 5
Run Code Online (Sandbox Code Playgroud)
它确实运行服务器作为bg进程和run_server_wrapper.csh它自己得到按摩:
[2] + Suspended (tty output) run_server_wrapper.csh
Run Code Online (Sandbox Code Playgroud)
这里有什么问题 ?
发生的事情是你把这个过程放在后台,但它还在写给终端.终端驱动程序不批准这种行为,并在尝试写入TTY时暂停该进程.当然,显而易见的答案是停止这样做.如果您要run_server.csh进入后台,还应该重定向输出,如下所示:
run_server.csh > /path/to/serverlog 2>&1 &
Run Code Online (Sandbox Code Playgroud)
如果您希望程序在后台运行并且您仍希望查看输出,通常的解决方案是将输出重定向到我显示的日志文件,然后使用该tail命令监视日志文件.
tail -f /path/to/serverlog
Run Code Online (Sandbox Code Playgroud)
如果你真的,真的想在后台运行一些东西并且仍能写入TTY,请关闭tostop标志.
stty -tostop
Run Code Online (Sandbox Code Playgroud)