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