标签: process

subprocess:删除Windows中的子进程

在Windows上,subprocess.Popen.terminate调用win32 TerminalProcess.但是,我看到的行为是我尝试终止的进程的子进程仍在运行.这是为什么?如何确保进程启动的所有子进程都被终止?

python windows subprocess process kill-process

38
推荐指数
5
解决办法
2万
查看次数

Python:从multiprocessing.Process获取回溯

我试图从multiprocessing.Process中获取一个traceback对象.不幸的是,通过管道传递异常信息不起作用,因为无法对pickback对象进行pickle:

def foo(pipe_to_parent):
    try:
        raise Exception('xxx')
    except:
        pipe_to_parent.send(sys.exc_info())

to_child, to_self = multiprocessing.Pipe()
process = multiprocessing.Process(target = foo, args = (to_self,))
process.start()
exc_info = to_child.recv()
process.join()
print traceback.format_exception(*exc_info)
to_child.close()
to_self.close()
Run Code Online (Sandbox Code Playgroud)

追溯:

Traceback (most recent call last):
  File "/usr/lib/python2.6/multiprocessing/process.py", line 231, in _bootstrap
    self.run()
  File "/usr/lib/python2.6/multiprocessing/process.py", line 88, in run
    self._target(*self._args, **self._kwargs)
  File "foo", line 7, in foo
    to_parent.send(sys.exc_info())
PicklingError: Can't pickle <type 'traceback'>: attribute lookup __builtin__.traceback failed
Run Code Online (Sandbox Code Playgroud)

有没有其他方法来访问异常信息?我想避免传递格式化的字符串.

python exception process multiprocessing traceback

38
推荐指数
4
解决办法
2万
查看次数

如何使用pid从Python终止进程?

我正在尝试在python中编写一些简短的脚本,这将在子进程中启动另一个python代码,如果尚未启动,则终止终端和应用程序(Linux).

所以它看起来像:

#!/usr/bin/python
from subprocess import Popen

text_file = open(".proc", "rb")
dat = text_file.read()
text_file.close()

def do(dat):

    text_file = open(".proc", "w")
    p = None

    if dat == "x" :

        p = Popen('python StripCore.py', shell=True)
        text_file.write( str( p.pid ) )

    else :
        text_file.write( "x" )

        p = # Assign process by pid / pid from int( dat )
        p.terminate()

    text_file.close()

do( dat )
Run Code Online (Sandbox Code Playgroud)

应用程序从文件".proc"读取的pid命名过程缺乏知识的问题.另一个问题是解释器说名为dat的字符串不等于"x" ??? 我错过了什么?

python linux terminal process

38
推荐指数
1
解决办法
9万
查看次数

使用fork()创建的子进程是否会在父级被杀死时自动终止?

我正在使用fork()C/C++ 创建子进程.
当父进程结束(或由于某种原因被杀死)时,我也想要杀死所有子进程.
这是由系统自动完成的吗?或者我必须自己做?

谢谢.


预先存在的类似问题:

c++ linux fork process parent-child

37
推荐指数
1
解决办法
4万
查看次数

escapeshellarg和escapeshellcmd有什么区别?

PHP有两个密切相关的函数,escapeshellarg()escapeshellcmd().他们似乎都做类似的事情,就是帮助一个字符串更安全的使用system()/ exec()的/ etc.

我应该使用哪一个?我只是希望能够接受一些用户输入并在其上运行命令,而不是让一切都爆炸.如果PHP有一个exec-type-function,它接受了一个绕过shell的字符串数组(比如argv),我会使用它.类似于Python的subprocess.call()功能.

php shell subprocess process exec

37
推荐指数
3
解决办法
3万
查看次数

如何优雅地终止进程?

我想终止一些进程,但我希望每个进程都有机会保存其数据,询问用户是否保存文件,甚至忽略关闭请求.

所以TerminateProcess不可能,因为它立即杀死了这个过程.另一种方法是使用SendMessage/ PostMessage发送WM_CLOSE到主窗口,不幸的是我不知道进程的窗户什么,我只有进程ID,所以FindWindow没有帮助的.有没有其他方法可以找到进程的主窗口?

换句话说: 有没有办法像任务管理器点击" 结束任务 " 时那样优雅地终止任何进程?(而不是"结束过程")

winapi process

37
推荐指数
4
解决办法
4万
查看次数

如何杀死shell的所有子进程?

我正在写一个bash脚本,它做了几件事.

最初它启动了几个监视器脚本,每个脚本都运行一些其他工具.

在我的主脚本结束时,我想杀死从我的shell中生成的所有东西.

所以,它可能看起来像这样:

#!/bin/bash

some_monitor1.sh &
some_monitor2.sh &
some_monitor3.sh &

do_some_work
...

kill_subprocesses
Run Code Online (Sandbox Code Playgroud)

问题是这些监视器中的大多数都会生成自己的子进程,所以这样做(例如):killall some_monitor1.sh并不总是有用.

还有其他办法可以处理这种情况吗?

bash shell fork kill process

37
推荐指数
6
解决办法
5万
查看次数

jvisualvm没有列出某些Java进程

我想获得某个Java进程的堆转储(可疑的内存泄漏).但是,当我启动jvisualvm工具时,我看不到任何正在运行的Java进程.

我已经谷歌了解了这一点,并且已经发现了一些文章说你必须使用与启动jvisualvm工具相同的JDK来运行Java进程,以便它能够看到它们.但是,据我所知,情况已经如此.我在本地做所有事情(我可以​​远程访问机器).

需要考虑的几件事:

  1. 这些进程在防火墙的Windows 2008服务器上运行
  2. 使用JDK 可执行文件的重命名版本运行进程java.exe
  3. 据我所知,进程正在使用1.6.0_18 JDK运行
  4. 其中一个正在运行的进程启动RMI注册表

我正在等待服务器的虚拟副本,所以我可以搞砸它(这是一个生产服务器).但与此同时; 关于为什么我在jvisualvm(或jconsole)中看不到任何进程的任何想法?

java process jvisualvm

37
推荐指数
2
解决办法
2万
查看次数

process.start()参数

当我对dos执行以下命令时,它将正常工作

ffmpeg -f image2 -i frame%d.jpg -vcodec mpeg4 -b 800k video.avi
Run Code Online (Sandbox Code Playgroud)

当我尝试在c#中使用流程类而没有参数时,它会在控制台窗口中加载ffmpeg,然后像往常一样消失.但是,当我尝试使用上面的参数时,格式完全相同......它不起作用!ffmpeg仍然加载,但是由于控制台窗口关闭如此之快,我无法确定错误是什么:/

Process ffmpeg = new Process();
ffmpeg.StartInfo.FileName = path + "//" + "ffmpeg.exe";
ffmpeg.StartInfo.Arguments = " -f image2 -i frame%d.jpg -vcodec mpeg4 -b 800k video.avi";
ffmpeg.Start();
Run Code Online (Sandbox Code Playgroud)

谁知道为什么会这样?为什么命令可以从dos工作,然后使用c#无法工作,即使参数完全相同?我之前使用过这种方法很多东西,从来没有遇到过这种情况.

.net c# command-line process

36
推荐指数
4
解决办法
11万
查看次数

Datanode进程未在Hadoop中运行

我使用本教程设置并配置了一个多节点Hadoop集群.

当我输入start-all.sh命令时,它会显示正确初始化的所有进程,如下所示:

starting namenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-namenode-jawwadtest1.out
jawwadtest1: starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-datanode-jawwadtest1.out
jawwadtest2: starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-datanode-jawwadtest2.out
jawwadtest1: starting secondarynamenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-secondarynamenode-jawwadtest1.out
starting jobtracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-jobtracker-jawwadtest1.out
jawwadtest1: starting tasktracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-tasktracker-jawwadtest1.out
jawwadtest2: starting tasktracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-tasktracker-jawwadtest2.out
Run Code Online (Sandbox Code Playgroud)

但是,当我输入jps命令时,我得到以下输出:

31057 NameNode
4001 RunJar
6182 RunJar
31328 SecondaryNameNode
31411 JobTracker
32119 Jps
31560 TaskTracker
Run Code Online (Sandbox Code Playgroud)

如您所见,没有运行datanode进程.我尝试配置单节点群集但遇到了同样的问题.有人会知道这里可能出现什么问题吗?是否有任何配置文件未在教程中提及或我可能已查看过?我是Hadoop的新手,有点迷失,任何帮助都会非常感激.

编辑:hadoop-root-datanode-jawwadtest1.log:

STARTUP_MSG:   args = []
STARTUP_MSG:   version = 1.0.3
STARTUP_MSG:   build = https://svn.apache.org/repos/asf/hadoop/common/branches/$
************************************************************/
2012-08-09 23:07:30,717 INFO org.apache.hadoop.metrics2.impl.MetricsConfig: loa$
2012-08-09 …
Run Code Online (Sandbox Code Playgroud)

configuration hadoop process

36
推荐指数
6
解决办法
12万
查看次数