Articles of 进程

如何从外部进程将数据写入现有进程的STDIN?

我正在寻找从外部进程向现有进程的STDIN写入数据的方法,并发现了类似的问题如何将数据stream式传输到来自Python中不同本地/远程进程的程序的STDIN中? 在stackoverlow中。 在这个线程中,@Michael说我们可以像下面那样获取现有进程的文件描述符,并允许在Linux上写入数据。 /proc/$PID/fd/ 所以,我创build了一个下面列出的简单脚本来testing从外部进程向脚本的STDIN (和TTY )写入数据。 #!/usr/bin/env python import os, sys def get_ttyname(): for f in sys.stdin, sys.stdout, sys.stderr: if f.isatty(): return os.ttyname(f.fileno()) return None if __name__ == "__main__": print("Try commands below") print("$ echo 'foobar' > {0}".format(get_ttyname())) print("$ echo 'foobar' > /proc/{0}/fd/0".format(os.getpid())) print("read :: [" + sys.stdin.readline() + "]") 这个testing脚本显示STDIN和TTYpath,然后等待一个写它的STDIN 。 我启动了这个脚本,在下面得到消息。 Try commands […]

在Windows上运行任意subprocess,仍然干净地终止?

我有一个应用程序A,我希望能够调用configuration文件中用户指定的任意其他进程。 批处理脚本B是一个用户希望被A调用的进程.B设置一些环境variables,显示一些消息并调用编译器C来做一些工作。 Windows是否为任意进程提供了一个标准的方法来干净地终止? 假设A在控制台中运行并收到CTRL + C。 它可以传递给B和C吗? 假设A在窗口中运行,并且用户试图closures窗口,它可以取消B和C吗? TerminateProcess是一个选项,但不是一个很好的select。 如果A在B上使用TerminateProcess,C继续运行。 如果C是长时间运行的,这可能会导致讨厌的问题,因为我们可能会启动另一个C实例来操作相同的文件,而C的第一个实例仍然在秘密工作。 此外,TerminateProcess不会导致干净的退出。 GenerateConsoleCtrlEvent听起来不错,当一切都在控制台中运行时,可能会工作,但文档说只能将CTRL + C发送到您自己的控制台,所以如果A在窗口中运行,将无法帮助。 在Windows上有没有和SIGINT等价的东西? 我很想find这样的文章: http : //www.cons.org/cracauer/sigint.html for Windows。

确定64位与32位Windows

我想configurationvisual studio 2005复制.dll的基础上是否在构build过程中的操作系统是64位或32位。 我不想指定平台目标是什么。 我第一次尝试使用batch file来查找Windows版本,但一些32位和64位版本的Windows共享相同的版本号。 任何人都知道有任何方法来检查这个? 谢谢!

使用VLC的虚拟接口时如何防止显示控制台

我尝试从Node.js服务器脚本以“虚拟”模式启动VLC,但是使用child_process.spawn('vlc',['-I dummy'])会在使用Windows时为VLC的输出生成一个新的控制台窗口。 有没有办法来防止这种情况发生,并通过标准输出ReadableStream强制所有的标准输出,所以没有“popup窗口”发生? 编辑 :这个问题与node.js没有任何关系,只是我调用它的方式和VLC的行为。 解决scheme如下。 谢谢。

无法在64位Windows 7中以较大的堆大小运行64位JVM

这是64位的Windows 7 Enterprise和64位的Java 7: java version "1.7.0_04" Java(TM) SE Runtime Environment (build 1.7.0_04-b20) Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode) 这发生在使用C:\Windows\SystemWOW64\cmd.exe (我错误地认为是64位版本) 和 C:\Windows\System32\cmd.exe (我刚刚发现,的Pulsar,是一个64位应用程序,尽pipepath名称)。 程序本身是微不足道的: public class Trivial { public static void main(String[] args) { System.out.println("total = " + toMB(Runtime.getRuntime().totalMemory())); System.out.println("max = " + toMB(Runtime.getRuntime().maxMemory())); } private static long toMB(long bytes) { […]

在64位机器上的VB6应用程序

我正在维护一个旧的VB6应用程序,它使用了一些Sheridan 3D控件(SSPanel和SSTab,可在threed32.ocx和tabctl32.ocx中find)。 这个应用程序能在64位机器上工作吗(我想32位的32是来自位数的?) 如果没有,我能做些什么来使它工作?

如何从Java内部find并杀死正在运行的Win-Processes?

我需要一个Java方法来查找正在运行的Win进程,从中我知道可执行文件的名称。 我想看看它是否现在正在运行,如果我发现它,我需要一个杀死进程的方法。

适用于C#应用程序的任何CPU / x86 / x64,并且是C ++ / CLI依赖项

我是Windows开发人员,我正在使用Microsoft Visual Studio 2008 SP1。 我的开发者机器是64位的。 我目前使用的软件是用C#编写的.exe文件。 不幸的是,我无法仅仅用C#来解决整个问题。 这就是为什么我还用C ++ / CLI开发了一个小的托pipeDLL。 两个项目都在相同的解决scheme。 我的C#.exe生成目标是“任何CPU”。 当我的C ++ DLL生成目标是“x86”时,DLL不加载。 据我了解,当我GOOGLE了,原因是C / CLI语言,不像其他.NET语言,编译为本地代码,而不是托pipe代码。 我将C ++ DLL构build目标切换到了x64,现在一切正常。 但是,一旦我的客户将我的产品安装在32位操作系统上,AFAIK一切都将停止工作。 我必须支持Windows Vista和7,它们都是32位和64位版本。 我不想回落到32位。 我的DLL中的250行C ++代码只占我的代码库的2%。 而且这个DLL只在几个地方使用,所以在典型的使用场景中它甚至没有加载。 我的DLL使用ATL实现两个COM对象,所以我不能使用“ / clr:safe ”项目设置。 有没有办法configuration解决scheme和项目,以便C#项目build立“任何CPU”的版本,C + +项目build立32位和64位版本,然后在运行时,托pipe的.EXE启动时,它使用32位DLL或64位DLL取决于操作系统? 或者也许有一些更好的解决scheme,我不知道? 提前致谢!

如何从C#启动windows“运行”对话框

我想在我的C#代码中从Windows启动运行对话框(Windows + R)。 我认为这可以使用explorer.exe来完成,但我不知道如何。

如何在x64上为我的进程启用alignment例外?

我很好奇,看看我的64位应用程序是否存在alignment错误。 从IPF,x86和x64上的Windows数据alignment : 在Windows中,生成alignment错误的应用程序将引发exceptionEXCEPTION_DATATYPE_MISALIGNMENT 。 在x64体系结构中 ,默认情况下,alignment例外是禁用的,而修复由硬件完成。 应用程序可以通过设置一对寄存器位来启用alignmentexception ,在这种情况下,除非用户操作系统用SEM_NOALIGNMENTFAULTEXCEPT屏蔽exception,否则将引发exception。 (有关详细信息,请参阅“ AMD体系结构程序员手册”卷2:系统编程。 ) [编者按: 强调我的] 在x86体系结构上 ,操作系统不会使alignment错误对应用程序可见。 在这两个平台上,alignment错误也会出现性能下降,但是与Itanium相比,性能会降低很多,因为硬件会使多次访问内存来检索未alignment的数据。 在Itanium上 ,默认情况下,操作系统(OS)会使此例外对应用程序可见,并且在这些情况下终止处理程序可能会有用。 如果你没有设置处理程序,那么你的程序将挂起或崩溃。 在清单3中,我们提供了一个示例,显示如何捕获EXCEPTION_DATATYPE_MISALIGNMENTexception。 忽略了查阅“ AMD体系结构程序员手册”的方向,我将参考“ 英特尔64和IA-32体系结构软件开发人员手册” 5.10.5检查alignment 当CPL为3时,可以通过设置CR0寄存器中的AM标志和EFLAGS寄存器中的AC标志来检查内存引用的alignment情况。 未alignment的内存引用会生成alignmentexception(#AC)。 在特权级别0,1或2下运行时,处理器不会产生alignmentexception。请参阅表6-7,了解启用alignment检查时alignment要求的说明。 优秀。 我不确定那是什么意思,但很好。 那么还有: 2.5控制寄存器 控制寄存器(CR0,CR1,CR2,CR3和CR4;见图2-6)确定处理器的工作模式和当前正在执行的任务的特性。 这些寄存器在所有32位模式和兼容模式下均为32位。 在64位模式下,控制寄存器扩展到64位。 MOV CRn指令用于操作寄存器位。 这些指令的操作数前缀被忽略。 控制寄存器总结如下,并且这些控制寄存器中的每个架构定义的控制字段都是单独描述的。 在图2-6中,64位模式下的寄存器宽度用括号表示(CR0除外)。 – CR0 – 包含控制处理器工作模式和状态的系统控制标志 上午 校准掩码(CR0的第18位) – 设置时启用自动校准检查; 清除时禁用alignment检查。 只有当AM标志置位,EFLAGS寄存器中的AC标志置位,CPL为3,处理器工作在受保护模式或虚拟8086模式时,才进行alignment检查。 我试过了 我实际使用的语言是delphi,但假装它是语言不可知的伪代码: void UnmaskAlignmentExceptions() { […]