`
ourteam
  • 浏览: 132385 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

process阻塞

    博客分类:
  • java
阅读更多

 调用系统其他进程,未等被启动进程进行完,java主进程就继续往下执行了,本以为调用procc.waitfor()可以解决问题,未果,google之发现如下方法:

代码:

//对process.waitFor()的改造,被启动的进程会因为缓冲区不够而被阻塞无法启动,调用该方法可以成功
public static int doWaitFor(Process p) { 
int exitValue = -1; // returned to caller when p is finished 
try { 
InputStream in = p.getInputStream(); 
InputStream err = p.getErrorStream(); 
boolean finished = false; // Set to true when p is finished 
while(!finished) { 
try { 
while( in.available() > 0) { 
// Print the output of our system call 
Character c = new Character( (char) in.read()); 
System.out.print( c); 
} 
while( err.available() > 0) { 
// Print the output of our system call 
Character c = new Character( (char) err.read()); 
System.out.print( c); 
} 
// Ask the process for its exitValue. If the process 
// is not finished, an IllegalThreadStateException 
// is thrown. If it is finished, we fall through and 
// the variable finished is set to true. 
exitValue = p.exitValue(); 
finished = true; 
} catch (IllegalThreadStateException e) { 
// Process is not finished yet; 
// Sleep a little to save on CPU cycles 
Thread.currentThread().sleep(500); 
} 
} 
} catch (Exception e) { 
// unexpected exception! print it out for debugging... 
System.err.println( "doWaitFor(): unexpected exception - " + 
e.getMessage()); 
} 
// return completion status to caller 
return exitValue; 
}

 

 

分享到:
评论
1 楼 manbanpaic 2012-11-15  
谢谢了  问题终于解决了

相关推荐

    process.StandardOutput.ReadToEnd 卡死解決方法! 新方法!

    最近做一个编程,用C#调用类似ssh,...网上说使用Process.StartInfo,Process.StandardInput,Process.StandOutput之类的,但是每次都在StandardOutput.Read/ReadToEnd卡死,原因复杂,最主要原因是微乳没有做好.下面是个分析 ...

    StandardOutput.Read/ReadToEnd卡死解決方法! 新方法,process.StandardOutput.ReadToEnd

    使用Process类重定向时出现阻塞的解决方案 用C#调用类似ssh,ftp,runas,adb shell之类有中间输入,中间输出的.网上说使用Process.StartInfo,Process.StandardInput,Process.StandOutput之类的,但是每次都在...

    Process Object View Getting Started.zip

    4. **分析数据**:通过对Process Object View中收集的数据进行分析,你可以发现潜在的问题,比如内存泄漏、CPU过高、进程阻塞等,进而采取相应的解决措施。 5. **故障排查**:当系统出现性能问题或异常时,Process ...

    JAVA Process 使用

    `Process`对象的`waitFor()`方法会阻塞直到进程结束,返回值是进程的退出码: ```java int exitCode = process.waitFor(); System.out.println("Process exited with code: " + exitCode); ``` ### 6. 销毁进程 ...

    编程100例-allProcess

    7. **异步操作**:在处理大量进程或需要避免阻塞主线程的情况下,可以使用异步编程技术,如`async/await`关键字,来实现非阻塞的进程操作。 8. **异常处理**:在处理进程时,可能会遇到各种异常,如进程不存在、无...

    Ruby-childprocess跨平台的ruby库来管理子进程

    例如,你可以通过`pid`属性获取进程ID,`wait`方法阻塞直到子进程结束,`stop`方法可以优雅地关闭子进程(发送SIGTERM,如果未响应则发送SIGKILL),而`io`属性则可以让你设置输入、输出和错误流。 对于更复杂的...

    node的process以及child_process模块学习笔记

    由于Node.js默认是单线程的,当遇到CPU密集型任务时,可能导致阻塞。`child_process`模块允许我们创建子进程来分担计算负载,子进程间可以通过通信进行数据交换。 Node.js提供了四种方式来创建子进程: 1. `child_...

    把其它应用嵌入到C#窗口 源代码

    这可以通过进程ID或窗口类名等信息查询得到,可以使用`Process.GetProcessesByName`和`Process.MainWindowHandle`方法。 2. **创建宿主控件**:在你的C#窗体中创建一个控件,如Panel或Grid,作为子窗口的容器。 3....

    System.ServiceProcess.dll(using System.ServiceProcess;)

    - `WaitForStatus(ServiceControllerStatus desiredStatus, TimeSpan timeout)`:阻塞调用,直到服务达到指定状态或超时。 5. **安装和卸载服务** 使用`InstallUtil.exe`工具,配合自定义的`ServiceInstaller`和`...

    Amp-process.zip

    它的核心在于异步进程调度,允许开发者在处理I/O密集型任务时,如网络请求、数据库操作等,不阻塞主线程,从而实现更高的并发处理能力。 AMP框架提供了一系列关键组件: 1. **事件循环(Event Loop)**:事件循环...

    CreateToolhelp32Snapshot Process32First Process32Next

    快照是一个非常有用的机制,因为它允许你在某个时间点捕获系统状态,而无需阻塞其他进程或线程的执行。函数的返回值是一个`TH32CS_SNAPPROCESS`类型的句柄,这个句柄后续会被`Process32First`和`Process32Next`函数...

    PyPI 官网下载 | django-process-4.5.7.tar.gz

    1. **后台任务处理**:它可能提供了异步任务处理能力,比如使用Celery或其他异步库来执行耗时操作,而不会阻塞主线程。 2. **进程管理**:对于需要长期运行的任务,如定时任务或监控任务,`django-process`可能提供...

    Process类 进程知识

    4. **WaitForExit**: 阻塞当前线程,直到进程退出为止。 5. **GetProcesses**: 获取所有正在运行的进程。 6. **GetProcessesByName**: 通过进程名获取所有相关进程。 7. **GetProcessById**: 通过进程ID获取特定进程...

    TestProcess.rar

    - `Process.WaitForExit()`: 阻塞当前线程,直到进程退出。 - `Process.Exited` 事件:当进程结束时,此事件会被触发,可以在事件处理程序中编写相应的代码。 5. **读取进程输出** - `Process.StandardOutput` ...

    Process启动进程完成交互并获取输出例程.zip

    4. `waitForFinished()`: 这个函数会阻塞当前线程,直到子进程结束。确保你在适当的时候调用它,以等待子进程完成。 5. `exitCode()`: 可以获取子进程的退出码,这对于判断进程是否成功执行非常有用。 6. `error()...

    进度条进度条 processBar实例

    - 为了防止UI线程阻塞,长任务应该在后台线程中执行,然后通过回调或事件驱动的方式更新进度条。例如,Java的`SwingWorker`,Android的`AsyncTask`,或者JavaScript的Promise。 7. **自定义进度条** - 有时,...

    并行计算 多线程 actor 协程 process

    协程在Python、Kotlin等语言中有广泛的应用,常用于实现非阻塞I/O,如在网络请求中,可以一边等待响应,一边处理其他任务。 四、进程(Processes) 进程是操作系统分配资源的基本单位,每个进程都有独立的内存空间...

    Training Material of SiN process.pdf

    这种曲线显示了在不同温度和压力下,氨氯化铵从固态转变为气态的特性,这对于理解沉积过程和防止设备堵塞等问题具有重要意义。 综上所述,氮化硅工艺培训材料深入解释了氮化硅薄膜的沉积过程、关键硬件组成、参考...

    process.zip

    这可以通过互斥锁(mutex)来实现,它是一种信号量类型,当一个线程获取了锁,其他尝试获取锁的线程将被阻塞,直到该线程释放锁。 压缩包中的子文件“1day”、“4day”、“2day”、“3day”可能是表示项目开发的...

Global site tag (gtag.js) - Google Analytics