Process process = new ProcessBuilder().command("mount").redirectErrorStream(true).start();

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Process process = new ProcessBuilder().command("mount").redirectErrorStream(true).start();相关的知识,希望对你有一定的参考价值。

Process process = new ProcessBuilder().command("mount").redirectErrorStream(true).start();,谁能帮忙解释一下,详细一点,谢谢
command("mount").这句话让我很郁闷,不知道怎样理解

就是新建一个进程,执行“mount”命令
new ProcessBuilder()//此类用于创建操作系统进程。

.command("mount")//设置此进程生成器的操作系统程序和参数。设置命令"mount"

redirectErrorStream(true)//设置后续子进程生成的错误输出都将与标准输出合并

.start();//开始执行,并返回进程实例

这些API都 有的,多看一下API吧

mount是Linux下的一个命令,它可以将Windows分区作为Linux的一个“文件”挂接到Linux的一个空文件夹下,从而将Windows的分区和/mnt这个目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。 目前mount已经不仅仅局限于Linux了,在Windows系统下的应用也越来越广了,多用在虚拟光驱类软件上,比如Clone CD,Daemon tool,WinMount等。追问

这个进程执行"mount"命令,达到了什么目的呢?

追答

  如果输入不带标志的 mount 命令,命令为安装的文件系统显示如下信息:
* 节点(如果安装是远程的)
* 安装的对象
* 安装点
* 虚拟 - 文件 - 系统的类型
* 安装的时间
* 任何安装选项

参考技术A command("mount")是指通过Process来执行mount命令,但是mount命令是干嘛的我也不知道....
command(String... command)
设置此进程生成器的操作系统程序和参数。
这是这个方法的描述追问

对阿,我关键是不知道MOUNT这个命令写在这,到底是什么作用,能做什么

追答

你现在是在看别人的代码还是什么?还是修改程序?
我觉得可能是在应用目录下面有一个mount命令(bat或者sh),是已经定义好的,然后通过java来调用这个命令执行操作,你把代码上下文贴出来吧,看的比较清楚

追问

代码在这
try Process process = new ProcessBuilder().command("mount").redirectErrorStream(true).start();
process.waitFor();
InputStream is = process.getInputStream();
byte[] buffer = new byte[1024];
while (is.read(buffer) != -1)
s = s + new String(buffer);

is.close();
catch (Exception e)
e.printStackTrace();

追答

如果这个代码是在一个完整系统里面,建议问上一个同事或者其他人mount命令是什么作用,如果是你学习Process类的使用的话,你可以跳过研究这个mount命令,改为你自己的命令,比如dir,比如其他的Windows/linux命令

C# 中的 Process.Start 与 Process `p = new Process()`?

【中文标题】C# 中的 Process.Start 与 Process `p = new Process()`?【英文标题】:Process.Start vs Process `p = new Process()` in C#? 【发布时间】:2011-02-12 10:27:47 【问题描述】:

正如this post 中所问的那样,在 C# 中调用另一个进程有两种方法。

Process.Start("hello");

Process p = new Process();
p.StartInfo.FileName = "hello.exe";
p.Start();
p.WaitForExit();
Q1:每种方法的优缺点是什么? Q2:如何检查Process.Start()方法是否发生错误?

【问题讨论】:

【参考方案1】:

对于第一种方法,您可能无法使用WaitForExit,因为如果进程已在运行,该方法将返回 null。

检查新进程是否已启动的方式因方法而异。第一个返回Process 对象或null

Process p = Process.Start("hello");
if (p != null) 
  // A new process was started
  // Here it's possible to wait for it to end:
  p.WaitForExit();
 else 
  // The process was already running

第二个返回bool

Process p = new Process();
p.StartInfo.FileName = "hello.exe";
bool s = p.Start();
if (s) 
  // A new process was started
 else 
  // The process was already running

p.WaitForExit();

【讨论】:

【参考方案2】:

对于简单的情况,优点主要是方便。显然,ProcessStartInfo 路由有更多选项(工作路径、在 shell-exec 之间进行选择等),但还有一个 Process.Start(ProcessStartInfo) 静态方法。

重新检查错误; Process.Start 返回 Process 对象,因此您可以等待退出并根据需要检查错误代码。如果你想捕获标准错误,你可能需要 ProcessStartInfo 方法中的任何一种。

【讨论】:

你能给我举个例子吗?如果必须获取对象并等待退出,在我看来,由于简单,没有理由使用 Process.start()。 @prosseek 好的;假设您想要捕获 stdout 和 stderr,在另一个用户的帐户中运行它,并在它完成时获取一个事件。但是,是的;对于简单的情况,静态方法更容易。【参考方案3】:

差别很小。静态方法返回一个进程对象,因此您仍然可以使用“p.WaitForExit()”等 - 使用创建新进程的方法,在启动之前修改进程参数(处理器亲和性等)会更容易过程。

除此之外 - 没有区别。双向创建一个新的进程对象。

在您的第二个示例中 - 与此相同:

Process p = Process.Start("hello.exe");
p.WaitForExit();

【讨论】:

以上是关于Process process = new ProcessBuilder().command("mount").redirectErrorStream(true).start();的主要内容,如果未能解决你的问题,请参考以下文章

RuntimeError: An attempt has been made to start a new process before the current process has...(代码片段

01进程

在 PowerShell 上设置默认 CLI 选项的别名 [重复]

swoole使用异步进程通信

An attempt has been made to start a new process before the current process has finished its bootstra

ES报错Native controller process has stopped - no new native processes can be started