我想创建一个在Linux上作为守护程序运行的Java控制台应用程序,我创建了应用程序和脚本以将应用程序作为后台守护程序运行.应用程序运行并等待命令行输入.
我的问题:
是否可以将命令行输入传递给正在运行的守护程序?
所有正在运行的进程都在一个特殊目录下/proc包含信息并挂钩进程.每个子目录都是/proc正在运行的进程的PID.因此,如果您知道特定过程的PID,则可以获得有关它的信息.例如:
$ sleep 100 & ls /proc/$!
...
cmdline
...
cwd
environ
exe
fd
fdinfo
...
status
...
Run Code Online (Sandbox Code Playgroud)
值得注意的是fd目录,其中包含与进程关联的所有文件描述符.0,1并且2(几乎?)所有进程都存在,并且0是默认的stdin.所以写入/proc/$PID/fd/0将写入该进程'stdin.
更强大的替代方法是设置连接到进程'stdin 的命名管道 ; 然后你可以写入该管道,进程将读取它而无需依赖/proc文件系统.
另请参阅在ServerFault上写入后台进程的stdin.