如何在Linux中检索python中的进程启动时间(或正常运行时间)?
我只知道,我可以调用"ps -p my_process_id -f",然后解析输出.但这并不酷.
我希望在以管理员身份运行进程时显示一些额外的UI元素,而不是在不运行时显示一些UI元素,类似于Visual Studio 2008在以管理员身份运行时在其标题栏中显示"管理员"的方式.我该怎么说?
在伪代码中,这就是我正在做的事情:
Process proc = runtime.exec(command);
processOutputStreamInThread(proc.getInputStream());
processOutputStreamInThread(proc.getErrorStream());
proc.waitFor()
Run Code Online (Sandbox Code Playgroud)
但是,有时processOutputStreamInThread看不到任何输出,有时也看不到.粗略地说,该方法创建BufferedInputStream命令的输出并将其发送到记录器.
根据我所看到的,我猜,command不用有它的所有倒入美联储流输出getInputStream()和getErrorStream(),从而使流是空的.
我的试验结果如下:
(1)waitFor()在java.lang.Process中是否要求在返回之前读取已执行程序的输出?
文档仅说明:
如果需要,导致当前线程等待,直到此
Process对象表示的进程终止.如果子进程已终止,则此方法立即返回.如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出.
(2)在什么条件下,流提供getInputStream并getErrorStream需要关闭和/或它们是否自动关闭?
文档仅说明:
获取子进程的错误流.该流获取从此Process对象表示的进程的错误输出流中传输的数据.
实现说明:缓冲输入流是个好主意.
一个用户报告说他必须自己关闭流,但是我至少在一部分时间内得到一个异常,表明当我尝试这样做时,流已经关闭.
编辑:改getOutputStream到getInputStream,现在提出上述.
解决方案:问题最终导致在某些情况下,用于处理输出流的线程在我的非常短暂的进程完成之后才会运行,从而导致输入流不给我任何数据. waitFor没有等待执行程序的输出.相反,程序在收集任何输出之前运行并终止.
我使用线程是因为我不确定我将在标准错误和标准输出上获得多少输出,并且我希望能够同时处理两个,而不会阻塞其中一个或者只有其中一个有可用数据.但是,因为我的线程无法一致地读取执行程序的输出,所以这是一个非解决方案.
我的最终编码看起来像这样:
ProcessBuilder pb = new ProcessBuilder(cmdargs);
pb.redirectErrorStream(true);
Process proc = pb.start();
processOutputStream(proc.getInputStream());
proc.waitFor()
Run Code Online (Sandbox Code Playgroud) 有没有办法在Java中启动进程?在.Net这可以通过以下方式完成:
System.Diagnostics.Process.Start("processname");
Run Code Online (Sandbox Code Playgroud)
在Java中是否有等价物,以便我可以让用户找到应用程序然后它适用于任何操作系统?
Process.fork与Ruby 1.9.2中的新Process.spawn方法有什么区别,哪一个更好地在子进程中运行另一个程序?据我所知,Process.fork接受代码块,Process.spawn接受系统命令加上一些其他参数.当我应该使用一个而不是另一个?
我被要求描述两个不同进程之间的上下文切换(1)所涉及的步骤,以及(2)同一进程中两个不同线程之间的步骤.
这太普遍了,或者你会加入什么来解释这个过程更清楚?
可能重复:
如何设置特定pthread的CPU亲和性?
Linux中是否有一种方法可以为除一个进程之外的所有进程禁用一个核心?我想只保留一个核心,仅用于我的流程.
预期的行为如下:
我有一个定期失败的进程,有时会启动重复的实例..
当我运行:
ps x |grep -v grep |grep -c "processname"
我会得到:
2
这是正常的,因为进程运行恢复过程..
如果我得到了,
0
我会想要启动这个过程:
4
我会想要停止并重新启动该过程
我需要的是一种取得结果的方法 ps x |grep -v grep |grep -c "processname"
然后设置一个简单的3选项功能
ps x |grep -v grep |grep -c "processname"
if answer = 0 (start process & write NOK & Time to log /var/processlog/check)
if answer = 2 (Do nothing & write OK & time to log /var/processlog/check)
if answer = 4 (stot & restart the process & write NOK & Time to log …Run Code Online (Sandbox Code Playgroud) 我有一个问题,在Ubuntu 10.04.3 LTS上陷入D状态的某些进程.
自11月5日(今天是12月6日)以来,他们一直处于这种状态.我知道这些是不间断的睡眠状态,通常与等待来自硬盘等硬件的数据有关.这是一个生产服务器,所以重新启动是最后的手段,是否有人能够阐明这些过程可能是什么?
这是D状态项的输出 ps -aux
www-data 22851 0.0 0.0 0 0 ? D Nov05 0:00 [2637.64]
www-data 26306 0.0 0.0 4008 12 ? D Nov05 0:00 ./2.6.37
www-data 26373 0.0 0.0 4008 12 ? D Nov05 0:00 ./n2
www-data 26378 0.0 0.0 4008 12 ? D Nov05 0:00 ./n2
Run Code Online (Sandbox Code Playgroud)
这是ps axl | awk '$10 ~ /D/'更多信息的输出 .
0 33 22851 1 20 0 0 0 econet D ? 0:00 [2637.64]
1 33 26306 1 20 0 …Run Code Online (Sandbox Code Playgroud) process ×10
linux ×4
.net ×2
java ×2
affinity ×1
bash ×1
c# ×1
core ×1
executable ×1
grep ×1
hard-drive ×1
inputstream ×1
privileges ×1
python ×1
ruby ×1
ruby-1.9 ×1
ubuntu ×1
uptime ×1