我有一个(Java)进程正在启动一个单独的进程foo
。 foo
启动需要几秒钟,然后才真正运行。控制权一启动就返回到父进程foo
,但不一定准备好。
另请注意,在调试模式下,foo
将人类可读的输出写入和.stdout
stderr
我知道的选项:
sleep
父进程需要n
几秒钟的时间,n
理论上比foo
以往需要的时间要长。stdout
让父进程在子进程的或中寻找特殊的东西stderr
,并阻塞直到看到它。- 准备好后,触摸操作系统中的某种标记文件
foo
,并让父进程监视该文件。
我真的不喜欢这些选项中的任何一个(1.有竞争条件,2.涉及匹配魔术字符串,3.有多个foo
进程冲突的风险)。以另一种方式(父进程到子进程)我可以发送信号进行通信,但我不知道子进程将其状态传递给父进程的更好方法。
答案1
孩子可以向父母发送信号。SIGUSR1
并SIGUSR2
为这种而存在特别指定情况,这里可能是理想的。
您的应用程序可以使用 Java 等效项 轻松找到其父进程 id getppid()
,或者作为替代方案,您可以让父进程$$
在命令行上传递其自己的 PID () 作为 Java 代码可以获取的参数。