我想运行一个外部进程并将其命令输出捕获到PowerShell中的变量.我目前正在使用这个:
$params = "/verify $pc /domain:hosp.uhhg.org"
start-process "netdom.exe" $params -WindowStyle Hidden -Wait
Run Code Online (Sandbox Code Playgroud)
我已经确认命令正在执行但我需要将输出捕获到变量中.这意味着我无法使用-RedirectOutput,因为这只会重定向到文件.
我正在尝试在C#中执行批处理文件,但我没有运气好.
我在互联网上找到了多个例子,但它对我不起作用.
public void ExecuteCommand(string command)
{
int ExitCode;
ProcessStartInfo ProcessInfo;
Process Process;
ProcessInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
Process = Process.Start(ProcessInfo);
Process.WaitForExit();
ExitCode = Process.ExitCode;
Process.Close();
MessageBox.Show("ExitCode: " + ExitCode.ToString(), "ExecuteCommand");
}
Run Code Online (Sandbox Code Playgroud)
命令字符串包含批处理文件的名称(存储在其中system32
)以及它应该操作的一些文件.(例如:) txtmanipulator file1.txt file2.txt file3.txt
.当我手动执行批处理文件时,它可以正常工作.
执行代码时,它给了我一个 **ExitCode: 1** (Catch all for general errors)
我究竟做错了什么?
我需要生成一个作为控制台应用程序的子进程,并捕获其输出.
我为方法编写了以下代码:
string retMessage = String.Empty;
ProcessStartInfo startInfo = new ProcessStartInfo();
Process p = new Process();
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;
startInfo.UseShellExecute = false;
startInfo.Arguments = command;
startInfo.FileName = exec;
p.StartInfo = startInfo;
p.Start();
p.OutputDataReceived += new DataReceivedEventHandler
(
delegate(object sender, DataReceivedEventArgs e)
{
using (StreamReader output = p.StandardOutput)
{
retMessage = output.ReadToEnd();
}
}
);
p.WaitForExit();
return retMessage;
Run Code Online (Sandbox Code Playgroud)
但是,这不会返回任何内容.我不相信该OutputDataReceived
事件被回调,或者该WaitForExit()
命令可能阻塞该线程,因此它永远不会回调.
有什么建议?
编辑:看起来我在回调中努力了.这样做:
return p.StandardOutput.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)
似乎工作正常.
bash中是否有任何内置功能可以等待任何进程完成?该wait
命令仅允许等待子进程完成.我想知道在继续执行任何脚本之前是否有任何方法可以等待任何进程完成.
这样做的机械方法如下,但我想知道bash中是否有任何内置功能.
while ps -p `cat $PID_FILE` > /dev/null; do sleep 1; done
Run Code Online (Sandbox Code Playgroud) top -c
Run Code Online (Sandbox Code Playgroud)
Top列出了所有进程,有很好的选项可以通过使用选项-u按用户名过滤进程,但我想知道是否有任何简单的方法来根据顶部输出的COMMAND列下列出的进程名过滤进程.
例如,我想要top -some选项-substring of processname和top显示pids只在其命令名中包含此子字符串
这似乎是一个基本问题,但我找不到任何文档:
分叉和生成node.js进程有什么区别?我已经读过,分叉是一个特殊的产卵案例,但是使用它们的不同用例/反应有哪些?
在Windows环境中,有一个API来获取正在运行进程的路径.在Unix/Linux中有类似的东西吗?
或者在这些环境中还有其他方法吗?
当我从VS启动VS的实验实例进行调试并停止调试时(有时直接从父VS),zombile devenv.exe进程仍在运行,我无法杀死.它坚持我的许多dll.
当我以管理员身份登录这台64位Win7机器时,我希望能够杀死我想要的任何进程.
I tried (from Administrator command prompt):
End Task from Task Manager.
TASKKILL /F /IM devenv.exe
PSKILL devenv.exe
Run Code Online (Sandbox Code Playgroud)
无返回任何错误,TASKKILL
并PSKILL
返回终止/终止进程的成功消息.但是devenv.exe仍然运行,它不会因为PID
保持不变而重新生成.它只在系统重启时消失,这不是一个很好的解决方案.
注意.LockHunter显示devenv已经锁定了自己.它无法解锁它.
上面的屏幕截图是Process Monitor的输出,显示devenv处于某种"Process Profiling"循环中(右键单击它并单击新选项卡中的打开图像以正确查看它).
有关如何在Windows上杀死此类进程的任何想法?
在Windows中,什么可以查找端口8080并尝试通过.BAT文件终止它正在使用的进程?
我正在学习如何使用Python中threading
的multiprocessing
模块和并行运行某些操作并加快我的代码.
我发现这很难(可能因为我没有任何理论背景)来理解一个threading.Thread()
对象和一个对象之间的区别multiprocessing.Process()
.
此外,我并不完全清楚如何实例化一个作业队列,并且只有4个(例如)它们并行运行,而另一个则在执行之前等待资源释放.
我发现文档中的示例清晰,但不是很详尽; 一旦我尝试使事情复杂化,我就会收到许多奇怪的错误(比如一种无法腌制的方法,等等).
那么,我什么时候应该使用threading
和multiprocessing
模块?
您能否将我链接到一些资源,解释这两个模块背后的概念以及如何正确使用它们来完成复杂的任务?
python parallel-processing multithreading process multiprocessing
process ×10
batch-file ×2
c# ×2
linux ×2
unix ×2
windows ×2
.net ×1
bash ×1
devenv ×1
environment ×1
kill-process ×1
node.js ×1
parent-child ×1
path ×1
powershell ×1
python ×1
scripting ×1
spawning ×1
top-command ×1
wait ×1
windows-7 ×1