我想创建一个在 Linux 上作为守护程序运行的 Java 控制台应用程序,我已经创建了该应用程序和脚本以将该应用程序作为后台守护程序运行。应用程序运行并等待命令行输入。
我的问题:
是否可以将命令行输入传递给正在运行的守护进程?
最佳答案
在 Linux 上,所有正在运行的进程在 /proc
下都有一个特殊目录包含过程的信息和 Hook 。 /proc
的每个子目录都是一个正在运行的进程的 PID。因此,如果您知道特定进程的 PID,就可以获得有关它的信息。例如:
$ sleep 100 & ls /proc/$!
...
cmdline
...
cwd
environ
exe
fd
fdinfo
...
status
...
值得注意的是 fd
目录,其中包含所有 file descriptors与过程相关联。 0
、1
和 2
存在于(几乎?)所有进程中,0
是默认标准输入。所以写入 /proc/$PID/fd/0
将写入该进程的标准输入。
一个更强大的替代方案是设置一个 named pipe连接到您的进程的标准输入;然后您可以写入该管道,进程将读取它而无需依赖 /proc
文件系统。
另见 Writing to stdin of background process在 ServerFault 上。
关于linux - 是否可以将输入传递给正在运行的服务或守护进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40732425/