跳转至

进程

测试代码见代码库

子进程

Process blocking reason: The input stream and the error stream are separated, and if they are not processed, blocking will occur.

  • 创建的子进程的所有标准 io(即 stdin,stdout,stderr)操作通过三个流 (getOutputStream(),getInputStream(),getErrorStream()) 重定向到父进程;
  • 有些本机平台仅针对标准输入和输出流提供有限的缓冲区大小,如果读写子进程的输出流或输入流迅速出现失败,则可能导致子进程阻塞,甚至产生死锁;
  • 标准输出流和错误流如果处理不当,其缓冲区不能被及时清除而被塞满,则进程被阻塞,即使调用Process.destory()也未必能销毁被阻塞的子进程

解决方案:

  • 并发获取Process的输出流和错误流;
  • 将错误流重定向到输出流;

环境变量

默认是继承 Java 进程的环境变量(等价于 System.getEnv)