Articles of 进程

在pipe道中获取命令输出,C为Linux

我需要运行一个Linux CLI命令,并从C中获取stdout输出 我可以使用pipe()来创build一个pipe道,然后fork / exec,在调用exec()之前将subprocess的stdout描述符redirect到pipe道中,并从父进程中的pipe道中读取数据。 另外我需要等孩子。 是否有一个简单的调用来做fork + redirect + exec + wait,就像system()做fork + exec + wait一样,只有system()不做redirect。 有popen(),它做叉+redirect+执行,但不做等待,所以我不能得到退出状态。

将32位库链接到64位程序

我有一个32位.so二进制只有库,我必须生成使用它的64位程序。 有没有一种方法来包装或转换它,所以它可以用于64位程序?

内存限制在64位Linux操作系统上运行的32位进程

一个32位进程在64位Linux上有多less虚拟内存(也就是说,在开始获取NULL指针之前,我可以分配多less内存并使用malloc() )? 我在我的32位Linux上试过了,达到了大约3GB的限制。 我能在64位Linux上获得更多的信息吗?

用python杀死进程

我需要做一个脚本,从用户获得以下内容: 1)进程名称(在Linux上)。 2)这个进程写入的日志文件名。 它需要杀死进程并确认进程已closures。 将日志文件名称更改为具有时间和date的新文件名称。 然后再次运行该进程,确认它已经启动,以便继续写入日志文件。 先谢谢您的帮助。

如何find所有的subprocess?

在我正在开发的基于Linux的项目中,我需要能够find我所有的subprocess。 每次开始logging都是不可行的 – 事后要find它们。 这需要是纯粹的C,我想这样做没有读/ proc。 有谁知道如何做到这一点?

linux:以编程方式获取另一个进程的父进程?

我试过谷歌,但发现getppid()获取当前进程的父pid。 我需要getppid(some_other_pid)类的东西,有这样的事情吗? 基本上需要一些进程的PID,并返回父进程的PID。

在Linux上更快地分配大型进程?

现代Linux上从一个大型stream程中获得与fork – execve组合相同效果的最快,最好的方法是什么? 我的问题是进程的分叉大到500MByte,而且一个简单的基准testing只能从进程中获得大约50个分支/秒(对于最小尺寸的进程来说比较是1600叉),这对于预期的应用来说太慢了。 一些谷歌search变成vfork被发明作为这个问题的解决scheme…但也警告不要使用它 。 现代Linux似乎已经获得了相关的clone和posix_spawn调用; 这些可能有帮助吗? 什么是vfork的现代替代品? 我在i7上使用了64位Debian Lenny(如果posix_spawn有帮助,该项目可以移动到Squeeze)。

如何杀死超过特定年龄的Linux进程?

我在某些服务器上有一些类似僵尸的进程出现问题,需要立刻杀掉。 我怎样才能最好地识别跑了一个多小时左右?

WndProc中的64位exception会自动失败

在Windows 7 32位下运行时,以下代码会导致严重失败: void CTestView::OnDraw(CDC* /*pDC*/) { *(int*)0 = 0; // Crash CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: add draw code for native data here } 但是,如果我在Windows 7 64bit上尝试这个,我只是在输出窗口中得到这个: Test.exe中0x13929384的第一次机会exception:0xC0000005:访问冲突写入位置0x00000000。 Test.exe中0x77c6ee42的第一次机会exception:0xC0150010:当前正在执行的线程未激活正在激活的激活上下文。 这是什么原因? 我知道这是一个硬件exception( http://msdn.microsoft.com/en-us/library/aa363082.aspx ),但为什么在32位和64位下运行的差异呢? 我能做些什么来正确处理这些错误? 因为它们应该真正被困住和修复,而不是正在发生什么,Windows正在进行向应用程序发送消息,让它运行(所以用户和开发人员完全不知道实际发生的任何问题)。 更新:我们的常规崩溃报告软件使用SetUnhandledExceptionFilter但不会在x64中调用WndProc中的硬件exception。 有没有人有任何这方面的信息,或解决方法? Update2:我已经在Microsoft Connect上报告了这个问题: https://connect.microsoft.com/VisualStudio/feedback/details/550944/hardware-exceptions-on-x64-machines-are-silently-caught-in-wndproc-messages

Python多处理stdininput

所有代码在python 3.4 windows 7上编写和testing。 我正在devise一个控制台应用程序,并且需要使用命令行(win os)的stdin来发出命令并更改程序的操作模式。 程序依靠多处理来处理cpu绑定的负载,并传播到多个处理器。 我使用stdout来监视这个状态和一些基本的返回信息,stdin根据返回的控制台信息发出命令来加载不同的subprocess。 这是我发现问题的地方。 我不能让多处理模块接受stdininput,但stdout工作得很好。 我认为在栈上find了以下的帮助所以我testing了它,发现使用线程模块,这一切都很好,除了所有的输出到标准输出都暂停,直到每次标准input由于GIL锁使用标准input阻塞循环。 我会说我已经用msvcrt.kbhit()实现了解决scheme。 然而,我不禁要问,在多处理function中是否有某种错误使stdin不能读取任何数据。 我尝试了很多方法,并且在使用多处理时没有任何工作。 即使尝试使用队列,但我没有尝试池,或从多处理的任何其他方法。 我也没有尝试在我的Linux机器上,因为我专注于试图让它工作。 这里是简化的testing代码,不能按预期工作(提醒这是用Python 3.4 – win7编写的): import sys import time from multiprocessing import Process def function1(): while True: print("Function 1") time.sleep(1.33) def function2(): while True: print("Function 2") c = sys.stdin.read(1) # Does not appear to be waiting for read before continuing […]