Articles of pipe理员

当操作系统杀死你的进程时返回代码

我想testing如果使用多进程,我可以在32位操作系统上使用超过4GB的内存(我的是:1GB内存的Ubuntu)。 所以我写了一个malloc稍小于1GB的小程序,并对该数组执行一些操作,并运行该程序的5个实例。 事情是,我怀疑操作系统杀死了其中的4个,只有一个幸存下来,并显示它是“PID:我已经完成”)。 (我已经尝试了小数组,并得到5印刷,当我看着与TOP运行的进程,我只看到一个实例..) 奇怪的是这个 – 我收到了所有实例的返回代码0(成功?),包括据说被OS 我没有得到任何按摩说明进程被杀害。 这个返回代码是否正常? (如果是这样,这减less了我对'返回代码'的信任…) 谢谢。 编辑:一些答案build议在小程序可能的错误,所以在这里。 分支和保存返回码的较大的程序是较大的,我在这里有麻烦,但我认为(并希望)没有问题。 我也注意到,如果不是用我的分叉程序来运行它,我使用'.a.out&./a.out&./a.out&./a.out&'来运行terminal。 ./a.out是附带的小程序的二进制文件)我看到一些“Killed”消息。 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #define SMALL_SIZE 10000 #define BIG_SIZE 1000000000 #define SIZE BIG_SIZE #define REAPETS 1 int main() { pid_t my_pid = getpid(); char * x = malloc(SIZE*sizeof(char)); if (x == NULL) { printf("Malloc failed!"); return(EXIT_FAILURE); […]

PhantomJS:pipe道input

我正在尝试使用PhantomJS来呈现一个HTML页面到PDF。 我不想将文件写入磁盘,我有内存中的HTML,我想在内存中的PDF。 在这个问题上使用Pooria Azimi的出色答案,我可以从命名pipe道获得pdf。 当在另一端尝试相同的时候(用命名pipe道replaceinput文件),我最终得到一个空白的pdf。 这就是我现在正在做的(简化): mkfifo in_pipe.html out_pipe.pdf ./phantomjs rasterize.js in_pipe.html out_pipe.pdf 然后在另一个terminal: echo '<center>hey!</center>' > in_pipe.html cat out_pipe.pdf > out.pdf 文件out.pdf被创build,但是是空的。 我错过了什么吗?

有没有可能在Linux上更改命名pipe道的大小?

我知道,对于当前版本的Linux内核,命名pipe道的大小是64K。 有没有可能增加这个大小呢? 我知道我可以切换到套接字,但首先我想看看是否可以通过增加命名pipe道大小来解决间歇性缓冲区溢出问题。

你怎么能find一个线程正在运行的处理器号码?

我有一个内存堆pipe理器,它根据系统上的处理器数量将堆分成不同的段。 内存只能分配到当前正在运行的线程处理器的分区。 这将有助于允许不同的处理器继续运行,即使两个不同的处理器要同时分配内存,至less我相信。 我发现了Windows的函数GetCurrentProcessorNumber(),但是这只适用于Windows Vista和更高版本。 有没有一种方法可以在Windows XP上运行? 另外,这可以通过POSIX系统上的pthread来完成吗?

什么条件导致一个打开的,无阻塞的命名pipe道(fifo)不可读取?

情况: new_pipe = os.open(pipe_path, os.O_RDONLY | os.O_NONBLOCK) # pipe_path points to a FIFO data = os.read(new_pipe, 1024) 读取偶尔会引起errno -11:资源暂时不可用。 什么时候提出这个错误? 这似乎是非常罕见的,因为常见的情况下返回数据: 如果没有编写者打开pipe道,则返回空str('')。 如果作者打开了pipe道,但没有数据在FIFO中,则返回空str('') 当然,如果作者将数据放在fifo中,那么这些数据将被读取。

将stdout作为命令行util的文件名?

我正在使用一个命令行实用程序,它需要传递一个文件的名称来写输出,例如 foo -o output.txt 它写入stdout的唯一信息是表示它已成功运行。 我希望能够将所有写入到output.txt所有内容都pipe理到另一个命令行实用程序。 我的动机是output.txt最终将成为一个40 GB的文件,我不需要保留,而且我宁愿pipestream而不是逐步处理大量文件。 在这种情况下有没有办法将实际输出(即output.txt )pipe道到另一个命令? 我可以以奇迹般的方式将stdout作为文件参数吗?

/ proc / / pagemaps和/ proc / / maps | Linux的

我试图让我的头在标题中提到的两个文件。 我查了一下这些东西。 然而,我不明白如何从他们中提取有用的信息(或者我只是以错误的方式接近它)。 让我解释一下:pagemaps是一个相当新的“特征”伪文件,包含分配给当前[pid]的虚拟页面的物理帧信息。 也就是说,给定一个从地址x开始的虚拟页面,对于虚拟地址开始说'vas',我可以使用vas索引页面映射文件来获得映射物理页面帧的64位。 这些位包含有关该虚拟页面的信息。 然而,当我提取这些位并做一些转换时,我正在看到我所迷失的东西。 这些位表示如下:0-54是页面帧号,55-60是页面移位,第63位是当前位,还有其他一些我感兴趣的位。 在使用/ proc / [pid] / maps中的地址进行映射之后,似乎几乎所有进程的页面都被交换了,即第63位总是为零。 🙁 我想问题是,我应该如何有效地使用页面地图来获得/ proc / [pid] / maps给出的地址的等效物理地址 公平的说,我发表了一个类似的问题,但是几天前这个方法有些不同。 如果有人能够对这个问题有所了解,我会非常感激。 ===编辑=== 要解决下面的注释:我正在从/ proc / [pid] / maps中读取一行,并且行如下所示: 00400000-00401000 r-xp 00000000 08:01 8915461 / home / janjust / my_programs / shared_mem 7ffffef1b000-7ffffef3c000 rw-p 00000000 00:00 0 [stack] 然后我提取它触及的虚拟页面的数量,并为二进制文件/ proc / [pid] / pagemaps编制索引,并且可以为每个虚拟页面提取分配给它的物理页面。 […]

在bash中使用命名pipe道 – 数据丢失的问题

做了一些在线search,find简单的“教程”使用命名pipe道。 但是,当我做任何与后台工作,我似乎失去了大量的数据。 [[编辑:find一个更简单的解决scheme,请参阅回复post。 所以我提出的问题现在是学术 – 如果有人可能想要一个工作服务器]] 使用Ubuntu 10.04与Linux 2.6.32-25-generic#45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010 x86_64 GNU / Linux GNU bash,版本4.1.5(1) – 发行版(x86_64-pc-linux-gnu)。 我的bashfunction是: function jqs { pipe=/tmp/__job_control_manager__ trap "rm -f $pipe; exit" EXIT SIGKILL if [[ ! -p "$pipe" ]]; then mkfifo "$pipe" fi while true do if read txt <"$pipe" then echo […]

Unixpipe入ls

我以为我理解* nixpipe道,直到现在…我有一个可执行文件称为studio ,符号链接到我安装的Android Studio ,我假设我可以得到链接到的位置 which studio | ls -l 但是这不起作用。 它给我的相当于在当前目录下运行ls -l 。 如果我运行which studio ,我会得到/home/me/bin/studio 。 如果我运行ls -l /home/me/bin/studio我会得到预期的输出,显示符号链接的位置。 那么为什么pipe道版本不工作? 我还没有关于pipe道的什么?

以超级用户身份运行一个linux系统命令,使用python脚本

我已经得到了我的机器上安装的后缀,我正在以编程方式更新virtual_alias(使用Python)(在一些行动)。 一旦我更新/ etc / postfix / virtual_alias中的条目,我正在运行命令: sudo /usr/sbin/postmap /etc/postfix/virtual_alias 2>>/work/postfix_valias_errorfile 但我得到的错误: sudo: sorry, you must have a tty to run sudo 我想以非人的方式运行提到的sudo命令(也就是说,我正在从python脚本运行这个系统命令)。 那么如何让这个命令以编程方式运行?