Articles of 进程

Twisted:在延迟subprocess和http请求之间进行通信?

背景: 我有一个长期运行的subprocess扭曲产卵。 我已经以这样一种方式分类了进程协议,当我收到std out,std err等的时候,我想知道单独的http请求(在一系列时间内)检查这些正在运行的进程的状态的能力通过共享variables或全局类或其他东西。 题: 如何让subprocess协议的“事件监听器”“丢弃”数据,以便稍后的http请求“拾取”。

在Linux x64上与x86共享库链接

我正在尝试与x64 Ubuntu 11.04 Natty Narwhal上的x86共享库链接,但是我收到以下消息: /usr/bin/ld: skipping incompatible ./bin/libshared.so when searching for -lshared /usr/bin/ld: cannot find -lshared 一些细节: 共享库名称是libshared.so 共享库build立在x86操作系统上。 我已经安装了lib32stdc ++ 6。 生成文件如下所示: test: main.o g++ -mi386linux -L./bin -lshared main.o -o test main.o: main.cpp g++ -m32 -c main.cpp -o main.o 有任何想法吗? 编辑:改变后-mi386linux标志为-m32我得到这个错误: /usr/bin/ld: cannot find -lshared /usr/bin/ld: skipping incompatible /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/libstdc++.so when searching for -lstdc++ […]

为什么这个过程在4GB时被杀了?

我写了一个程序,它处理大量的数据。 我的CPU和操作系统(Ubuntu)都是64位,我有4GB的RAM。 使用“top”(%Mem字段),我看到进程的内存消耗增加了大约87%,即3.4+ GB,然后死亡。 然后,我使用“uname -m”来检查一个进程可以访问多less内存,这个“uname -m”是“无限的”。 现在,由于操作系统和CPU都是64位的,并且还存在一个交换分区,操作系统应该已经使用了虚拟内存,即交换空间总共为> 3.4GB + yGB,并且只有当进程需要更多的内存时应该已经被杀害了。 所以,我有以下问题: 一个进程可以在64位m / c上理论上访问多less物理内存。 我的答案是2 ^ 48个字节。 如果物理内存less于2 ^ 48字节,那么操作系统应该使用虚拟内存,是否正确? 如果回答上面的问题是YES,那么OS也应该使用SWAP空间,为什么它甚至会使用它来终止这个过程。 我不认为我们必须使用一些特定的系统调用来编写我们的程序来实现这一点。 请build议。

从Java程序运行grep

我已经花了3天,没有太多的运气在谷歌如何从Java内部运行一个grep进程。 我有下面的代码来运行一个grep进程,但是,我只获取响应的第一行。 package com.example.parser; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) { try { Process process = new ProcessBuilder("grep", "-rni", "\"public static void main(\"", "/home/user/dev/java/").start(); BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); String line = ""; while((line = br.readLine()) != null) { System.out.println(line); } System.out.println("Exit Code: " + […]

必须重新编译运行x32 ABI应用程序的内容?

我可以使用新的x32 ABI编译应用程序,然后在正常的内核中运行它吗? 运行时C库怎么样? 与预编译的x86 / x86_64库有任何forms的互操作性吗?

如何确定一个长期运行的过程是否死亡?

我正在开发一个与多个进程进行通信的守护进程。 守护进程无法始终监视进程,但它必须能够正确识别进程是否死亡,释放它所持有的恐慌资源。 进程可以与守护进程进行通信,在开始时给它一些信息,但反之亦然。 所以守护进程不能仅仅询问一个进程的身份。 最简单的forms是使用他们的PID。 但最终另一个过程可以分配相同的PID没有我的工具不知不觉中。 更好的方法是使用PID加上进程开始的时间。 具有相同PID的新过程将具有不同的开始时间。 但是我找不到如何以POSIX方式获得进程启动时间的方法。 使用ps或看/proc/<pid>/stat似乎不够便携。 符合POSIX标准的更复杂的想法是: 每个进程创build一个临时文件。 用flock锁住它 告诉我的守护进程“我的身份与这个文件相关”。 任何时候守护进程都可以检查临时文件。 如果它被locking,这个过程是活着的。 如果不是,那么这个过程就是死的。 但是这似乎不必要的复杂。 有没有更好的或标准的方法? 编辑:守护进程必须能够重新启动后恢复,所以不可能保持每个进程的持久连接。

使用kill函数创build一个僵尸进程

我试图用kill函数创build一个僵尸进程,但是它只是简单地杀死这个孩子并返回0 。 int main () { pid_t child_pid; child_pid = fork (); if (child_pid > 0) { kill(getpid(),SIGKILL); } else { exit (0); } return 0; } 当我检查进程的状态时,状态栏中没有z 。

Linux中的进程和线程是如何相同的?

我已经读过一个进程和一个线程在Linux中是一样的,例如在这个问题中它说: Linux上的线程和进程完全没有区别。 但我不明白一个过程和一个线程怎么可能意味着同样的事情。 我的意思是一个线程是由CPU执行的,一个进程只是线程的“机箱”,它允许线程共享内存。 该图显示了进程与其线程之间的关系: 很显然,一个过程和一个线程并不意味着同样的事情!

我可以启动一个脚本,使其独立于Linux上的父进程吗?

有没有办法从另一个进程启动一个脚本,以便如果进程死亡/结束,脚本仍然继续? 请setuid做这个? 如果我要将所有者设置为root,然后启动脚本? 例如,如果我有一些PHP代码启动一个脚本,但httpd死亡或死亡,我认为这需要我的脚本。 有没有解决的办法? 具体来说,我在Fedora 10上使用Apache 2和PHP 5。

从shell调用脚本和使用system()之间有什么区别?

我已经build立了一个bash脚本来启动我的系统中的一些进程。 它只是调用进程和相关的configuration文件。 和我从命令行调用的一样。 #!/bin/bash # Start specified process in a new session setsid $1 &>/dev/null & 因此,启动一些someprocess ,我会从命令行调用: root@supercomputer:~# start someprocess 这就像一个魅力。 每一个过程,每一次。 但是当我从一个不同的正在运行的C ++进程进行一个system调用时,一些进程永远不会启动。 system( "start someprocess" ) 这种方法对我的90%的过程,除了一个。 在工作和非工作过程中唯一的区别是非工作的人使用下面的专有库。 我最近添加了setsid选项到bash脚本,希望开始一个新的会话将有所帮助,但没有任何区别。 我也试过popen和execv 。 不用找了。 所以我的问题是用system()调用某些东西和从命令行调用相同的调用有什么区别? 所有进程都是在Linux上用C ++编写的。