Articles of pipe理员

Bash匿名pipe道

当devise一系列命令来执行某个任务时,我遇到了匿名pipe道不像预期那样的问题。 由于我正在运行的原始命令太复杂了,所以在这里我已经创build了一个显示问题的例子(我知道所有这些命令基本上什么都没有做)。 此外,我使用PV来显示数据是否实际上从input复制到输出。 cat /dev/zero | pv > /dev/null 这按预期工作。 (将数据从/ dev / zero复制到/ dev / null) cat /dev/zero | tee /dev/null | pv > /dev/null 这也按预期工作(复制数据并将两个副本发送到/ dev / null) cat /dev/zero | tee >(pv -c > /dev/null) | pv -c > /dev/null 这个命令只有部分工作。 虽然从STDIN到STDOUT的拷贝仍然有效,(一个pv会在短时间内显示进度),但是整个命令会被匿名pipe道阻塞,而这个匿名pipe道并没有收到任何东西,因此其中一个输出不能被写入(我通过让它写入文件而不是/ dev / null来检查这一点)。 如果有人有一个想法,为什么这不起作用(如预期?)在bash中,我会很高兴的帮助。 PS:如果我使用zsh而不是bash,命令按预期运行。 不幸的是,这个需要运行的系统没有zsh,并且我没有办法在部署的系统上获得zsh。

截断内存映射文件

我正在使用内存映射IO的索引文件,但问题是,我不能resize为空的文件。 某处之前: MappedByteBuffer map = raf.getChannel().map(MapMode.READ_WRITE, 0, 1 << 30); raf.close(); // use map map.force(); map = null; 调整: for (int c = 0; c < 100; c++) { RandomAccessFile raf = new RandomAccessFile(indexFile, "rw"); try { raf.setLength(newLen); if (c > 0) LOG.warn("used " + c + " iterations to close mapped byte buffer"); return; […]

mmap和内存使用情况

我正在写一个程序,从networking接收大量的数据(不同大小),处理它们并将它们写入内存。 由于某些数据块可能非常大,我目前的做法是限制使用的缓冲区大小。 如果一个块大于最大缓冲区大小,我将数据写入一个临时文件,稍后读取文件块进行处理和永久存储。 我想知道这是否可以改善。 我一直在阅读有关mmap的一段时间,但是我不是百分之百确定它是否能帮助我。 我的想法是使用mmap来读取临时文件。 这有什么帮助吗? 我关心的主要问题是偶尔的一大块数据不应该填满我的主内存,导致所有的内容都被换出。 另外,你认为临时文件的方法是有用的吗? 我甚至应该这样做,或者,我应该相信linux内存pipe理器为我做这个工作吗? 或者我应该干点什么?

Linux中的pipe道是否会丢失数据?

有多less数据可以包含上限?

进程监控 – Python / Ubuntu / Linux

我有几个需要以deamon模式运行的进程,我刚刚发现了新手,所以我开始使用它。 是否有任何Python库或应用程序,我可以用来监视和控制这些进程从HTML界面? 我在问,因为我想阻止自己重新发明轮子。 🙂 有任何想法吗?

为什么常量存储在C内存映射的文本段中?

你好请考虑下面的代码片段,在Linux机器(64位)上用gcc编译,并带有相应的内存映射 #include <stdio.h> int global = 2; int main(void) { int local = 0; return 0; } text data bss dec hex filename 1092 500 16 1608 648 mem 这里有一个全局variables初始化为2。 它被存储在数据段中考虑使其为const的情况,如下所示 #include <stdio.h> int const global = 2; int main(void) { int local = 0; return 0; } text data bss dec hex filename 1096 […]

打开()时试图打开pipe道读取块

我有两个进程,一个服务器和一个客户端,应该通过pipe道(C ++,Linux)进行通信。 服务器用O_RDONLY标志打开pipe道,用O_WRONLY打开客户端。 然而,服务器在open函数中阻塞,而客户端似乎成功运行( open函数返回成功, write函数也是如此)。 我已经读过,如果O_NONBLOCK标志被设置,读取function将继续,但我不希望它继续,如果没有客户端连接 – 可以阻止, 直到客户端连接 ,但在我的情况下,它仍然阻止即使客户端运行完成后 你能否告诉我我做错了什么? 这里是代码: // Server side int pipe; int status, nr_read = 0; status = mkfifo(FIFO_NAME, 0666); if (status < 0) { // If the file already exists, delete it unlink(FIFO_NAME); // Try again status = mkfifo(FIFO_NAME, 0666); if(status < 0) { printf("mkfifo error: %d\n", […]

smap中的“Private_Dirty”记忆是什么意思?

我有一个巨大的内存消耗Java过程,我正试图弄清楚他正在做什么,所有这些内存。 所以,我正在对这个PID做一个pmap -x,这是一个结果: Address Kbytes RSS Dirty Mode Mapping 0000000000001000 4 0 0 rw— [ anon ] 0000000000400000 48 0 0 rx– java 000000000050b000 4 4 4 rw— java 0000000003b9d000 264 224 212 rw— [ anon ] 0000000003bdf000 2199556 1887992 1830160 rw— [ anon ] 000000396c800000 112 108 0 rx– ld-2.5.so 000000396ca1c000 4 4 4 […]

在ICC中embeddedICC颜色configuration文件

我正在生成PDF,其中所有graphics都在sRGB色彩空间的\ DeviceRGB中绘制。 我想使用ICCconfiguration文件将PDF转换为不同的颜色configuration文件,并embeddedICCconfiguration文件,但我找不到一个好的工具来做到这一点。 我曾尝试ImageMagick,但是光栅化PDF是不受欢迎的,我尝试过使用Ghostscript。 但是,虽然这转换颜色,它不embeddedICCconfiguration文件。 有什么工具或库(最好Java或Scala)可用于Linux,做我想要的? 我试过的Ghostscript命令是: gs -o cmyk.pdf -sColorConversionStrategy=CMYK -sDEVICE=pdfwrite \ -dOverrideICC=true -sOutputICCProfile=CoatedFOGRA27.icc \ -dRenderIntent=3 in.pdf 和 gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -ColorConversionStrategy=CMYK \ -dProcessColorModel=/DeviceCMYK -sOutputICCProfile=CoatedFOGRA27.icc \ -sOutputFile=cmyk.pdf in.pdf 和以上的几个变化。 我已经尝试了Ghostscript版本9.10和9.16。

Linux / Windows中的C / C ++内存使用API

我想获得每个进程和系统范围的内存使用信息。 在Windows中,这很容易。 GetProcessMemoryInfo和GlobalMemoryStatusEx可以非常轻松地完成这些工作。 例如,GetProcessMemoryInfo给出给定进程的“PeakWorkingSetSize”。 GlobalMemoryStatusEx返回系统可用内存。 不过,我需要在Linux上完成。 我试图find相当于GetProcessMemoryInfo和GlobalMemoryStatusEx的Linux系统API。 我发现'getrusage'。 然而,struct rusage中的最大'ru_maxrss'(驻留集大小)仅为零,这不被执行。 另外,我不知道要获得全系统的空闲内存。 目前的解决方法,我使用的是“系统(”ps -p%my_pid -o vsz,rsz“);”。 手动logging到文件。 但是,处理数据很脏,不方便。 我想知道一些奇特的Linux API用于这个目的。