java关于进程的一个问题,求帮忙。

祥林会跟你远走高飞 发布于 2013/07/26 12:08
阅读 513
收藏 2

我是使用ffmpeg.exe来进行视频格式的转换的:
第一:我执行一个main方法,这时(java.exe)这个进程就会被load到内存中被执行,然后继续执行main的主线程。
第二:这时我又开了一个其他线程,来执行视频的格式转换,此时会帮我新创建出一个新进程(ffmpeg.exe)来。
第三:这时候出现了两个进程,随之而来的也出现了问题。

经过分析测试发现:
1、只有java.exe进程结束后,才会执行ffmpeg这个进程。这并不是我想要的。
2、我需要的执行顺序是这样:先执行java.exe进程,再转码进程ffmpeg.exe执行完,然后再继续java.exe进程
3、因为在执行ffmpeg.exe这个进程中,我需要通过java.exe进程 来检测ffmpeg.exe进程的视频转码是否完成,返回给客户端,判断是否继续执行

我的问题:
1、java在创建进程的时候是否可以设置该进程的优先级?
2、我可以通过java来获取一个进程的执行时间么?
3、为什么只有在java.exe进程结束后才会执行ffmpeg.exe进程?
4、默认的cpu调度进程的算法是什么算法啊?(windows)

特别说明:
1、可能我的表达不是很清楚,各位大神的帮忙,小弟不胜感激。
2、文字会比较多,如果看不太懂,我可以具体说说

以下是问题补充:

@祥林会跟你远走高飞:问题补充: 1、其实我只要实现两个进程的并行即可。 2、请问两个进程有关系吗?因为ffmpeg.exe这个进程是通过java.exe进程的主线程main创建出来的。 (2013/07/26 14:00)
加载中
0
星爷
星爷
什么新进程,坑定使用线程解决问题,纳雍进程来回切换的。
祥林会跟你远走高飞
祥林会跟你远走高飞
这个ffmepg.exe视频格式转换,是新创建一个进程去操作的。额,这个偶也没办法呀。。。
0
TrulyBelieve
TrulyBelieve

"只有java.exe进程结束后,才会执行ffmpeg这个进程",之前我也遇到过,只不过在某些操作系统是这样,有些是并行执行。

child = Runtime.getRuntime().exec(xxxx),后一定要执行

child.getOutputStream().close();

child.getErrorStream().close();

才可以

readInfo = new BufferedReader(new InputStreamReader(child.getInputStream()));
while (readInfo.readLine() != null)
{
}
等待子进程

以上方法参考一下吧。

祥林会跟你远走高飞
祥林会跟你远走高飞
对对对,我就是想让他两个并行执行。你下面的代码可以实现么?
0
Monkey
Monkey
process.waitFor()
祥林会跟你远走高飞
祥林会跟你远走高飞
在Process类中,getInputStream用来获取进程的输出流,getOutputStream用来获取进程的输入流,getErrorStream用来获取进程的错误信息流。为了保险起见,在读出的时候,最好把子进程的输出流和错误流都读出来,这样可以保证清空缓存区。 问题解决了谢谢
Monkey
Monkey
回复 @王鹏1989 : 那只能说明一个问题,你那个命令行根本没起效果。
祥林会跟你远走高飞
祥林会跟你远走高飞
这是判断是否进程结束的方法吧,如果成功结束返回0,否则返回其他。并且该进程进入阻塞状态。也不能实现主进程与子进程的并行计算啊。
0
王瑞平
王瑞平
wait、notify
祥林会跟你远走高飞
祥林会跟你远走高飞
大哥你说的这个是线程,我们的是进程啊。。17
返回顶部
顶部