Articles of 进程

64位操作系统(Windows)上的32位应用程序内存限制

使用/ LARGEADDRESSAWARE时,64位操作系统上的32位应用程序的内存限制为2 GB或4 GB。 来源: 一个64位操作系统上的32位进程访问可以有多less内存? 我的问题:这是限制PER进程,还是限制是所有组合的32位进程? 如果有三个32位进程正在运行(在64位操作系统上),我可以使用多达12 GB的内存(每个4个),还是将它们限制在共享的4 GB之间?

当其父母sshd进程终止时,进程会发生什么?

如果我在host1上运行一个shell,并执行ssh host2 some-command ,那么我closuresterminal窗口(或者杀死host1上的ssh进程),看起来host2上的sshd进程相当及时地终止。 但是… some-command会发生什么? 取决于它是什么命令,它有时会终止,但有时不会。 some-command收到什么信号? 什么文件描述符(如果有的话)被操纵,以及如何?

Process.Start()创build的进程在父应用程序closures时终止

我在Debian 6上使用C#和Mono 2.10.2。 所以情况是我创build了一个Process.Start()如下的进程: Process p = new Process(); p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.WorkingDirectory = "/home/lucy/"; p.StartInfo.FileName = "/bin/sh"; p.StartInfo.Arguments = "/home/lucy/test.sh"; p.EnableRaisingEvents = true; p.ErrorDataReceived += new DataReceivedEventHandler(ShellProc_ErrorDataReceived); p.Start(); 在这种情况下被称为test.sh的shell脚本运行了几个东西,包括启动一个Java应用程序。 我收到的问题是当C#应用程序终止时,bash脚本/ Java应用程序也终止。 我看了Stack Overflow上发布的其他几个类似的问题,都没有得出明显的结论,包括: 如何创build一个超过其父母的过程 根据一些用户和所谓的文档,Process.Start()创build的进程不应该在应用程序终止时被终止,但显然在我的情况是不正确的。 所以这可能是一个单声道相关的问题,如果确实是这样的话,那么现在我有什么替代scheme,因为我现在没有想法。

如何在Python中重用Popen的中间结果?

代码是这样的: from subprocess import Popen, PIPE p1 = Popen("command1", stdout = PIPE) p2 = Popen("command2", stdin = p1.stdout, stdout = PIPE) result_a = p2.communicate()[0] p1_again = Popen("command1", stdout = PIPE) p3 = Popen("command3", stdin = p1_again.stdout, stdout = PIPE) result_b = p3.communicate()[0] with open("test") as tf: p1_again_again = Popen("command1", stdout = tf) p1_again_again.communicate() 不好的部分是: command1被执行了三次,因为当我使用commnnicate一次时,那个commnnicate对象的stdout不能被再次使用。 […]

让subprocess等待父进程

我必须在C中编写一个程序,它将fork一个新的进程,然后使用该进程的pid来执行另一个函数。 不过,我需要在subprocess运行之前调用这个函数,我不知道该怎么做。 这是我正在尝试做的一些伪代码。 pid_t pid = fork(); if(in_child){ //In the child process //launch child application //somehow stop the child application before it actually executes any code } else{ //call my function with the child's pid //resume the child process //do other stuff } 如果你需要任何额外的信息,请询问。 谢谢。 编辑:我没有访问该孩子的代码。 我只是想运行一个可执行文件。

用setgpid()分组subprocess

我只是没有得到所有的东西。 我的进程树: 0 / \ 1 2 / \ 5 3 / 4 我想创build一个进程组(3,4,5),并从这个组发送信号,比如2。 我这样试了: setpgid(pid3, pid3); setpgid(pid4, pid3); setpgid(pid5, pid3); … kill(-pid3, SIGUSR1); 我应该在哪里放置我的setpgid()块? 我试着把它放在setpgid()和其他所有进程中,但是setpgid()返回“没有这样的进程”或“不允许的操作”。 pids存储在文件中,所以我只是在调用setpgid()之前检索它们。

试图杀死一个产卵的过程结束了一个不成熟的过程

场景:我正在开发一个守护进程监视应用程序,它根据请求(TCP-IP)启动和停止守护进程。 为了实现这一点,分叉之后,我调用setsid()以便从父进程(监视进程)“分离”新进程。 当我试图杀死监视应用程序创build的其中一个进程时,它结束了。 这是我的代码: int retval; char* arg_list[] = { NULL /* The argument list must end with a NULL. */ }; retval = fork(); if (retval == 0) { umask(0); setsid(); execv(LBSDPATH, arg_list); exit(0); } 据我了解,死/僵尸进程意味着父母还没有join进程。 不setsid()解决它?

进程pipe理在C:发送数据到父进程

我正在做一个Operative Sytems类的程序,我需要一个很好的方法来将一个整数从subprocess传递给它的父进程,最好不使用pipe道。 经过一些尝试和错误,我得到了这样的工作: pid_t pid_son; int status; if( (pid_son = fork()) >= 0) { if(pid_son == 0) { int result = 0; // Make some arithmetic exit(result); } else { while(pid_son != wait(&status)); printf("The result is %d\n",result); } } 但是这对我来说并不“正确”(退出应该返回error handling的进程退出状态,而不是随机的整数)。 有没有一种更清洁的方式来将结果“发送”到父进程而不使用这个技巧?

如何持续监控Linux中的进程创build?

我的进程启动了一个进程 – 在这个例子中,它是一个shell,但它真的适用于任何进程。 当shell创build新进程并获取其PID时,我需要得到通知。 我可以在任何给定的时间对整个进程树进行快照(当然, pstree也可以),但是如何监视具有给定PID的进程创build新进程? 到目前为止,我已经find了几种方法来处理如何通过在C中的PID来监视事件的外部进程? 没有一个真正解决我的问题: 监控NetLink proc接口。 问题:需要root权限,我没有。 自定义库重写由LD_PRELOAD加载到shell进程的系统调用。 问题:它也会被shell的子项inheritance,而我不想要 – 我只想监视这个shell。 ptrace()的shell。 问题:通知父(即我的进程)有关创build新进程的PTRACE_O_TRACEFORK ,即PTRACE_O_TRACEFORK , PTRACE_O_TRACEVFORK和PTRACE_O_TRACECLONE将ptrace()传播给subprocess,而我只想监视shell。 使壳合作。 问题:在BASH命令callback(正如在undistract-me中使用的)非常黑客。 我也喜欢避免特定于shell的代码。 我觉得我在这里错过了一些简单的东西。 我觉得我可以使上述解决scheme之一与更多的黑客工作,但是…当然,我不必诉诸如LD_PRELOAD和ptrace()大枪这样一个简单的任务,是吗? JFYI我在Vala编码,但也欢迎C片段。

在目标文件中分配指令的地址

当我们使用gcc -c编译任何c代码,并执行objdump -d <filename>.o我们会看到 Disassembly of section .text: 0000000000000000 <main>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: 48 83 ec 10 sub $0x10,%rsp 8: 48 8d 45 fc lea -0x4(%rbp),%rax c: 48 89 c7 mov %rax,%rdi f: b8 00 00 00 00 mov $0x0,%eax . . . 但是在链接之后,偏移改变为gcc -o prog -L/library/path […]