Articles of pipe理员

在Unix中从EAR文件中提取特定的类文件

我有一个包含大约20个jar文件的ear文件。 现在在这个EAR里有一个特定的jar文件,里面包含了应用程序类文件。 现在我想在unix中使用一行命令,这个命令可以从EAR里面的这个jar(在这种情况下是jar 1)中提取一个特定的类文件。

在内存中散列一个Linux进程

我正在编写一个程序,在内存中散列正在运行的进程,并将其与已知的哈希(与反病毒的工作方式类似)进行比较。 我想专注于只读部分,特别是数据和可执行部分。 过去没有这样做,我将如何去提取这个信息? 做一个简单的cat /proc/PID/maps ,我看到各个部分。 我需要手动parsing这些数据还是有函数来提取这些信息?

如何使系统看到在Ubuntu 12.04上新鲜安装的Python 2.7.8(精确)

简介:在我的Ubuntu机器上安装了更多的Python之后,有几个工具不能工作。 为什么? 我唯一使用Linux的经验是Ubuntu 12.04,到目前为止,我主要依靠apt-get来安装软件包(即使用./configure && make && sudo make install的经验很less)。 更新的版本的python似乎不可以通过apt-get,所以我下载安装Python 2.7.8与你的典型 ./configure && make && sudo make install 现在,我基本上没有包pipe理的知识,所以考虑到这一点… 无论出于什么原因,我不得不用手工replace/ usr / bin中的python符号链接以适当的引用新的二进制文件(我认为安装会这样做)。 顺便说一下,我的机器上仍然有python 2.7.3。 即 cd /usr/bin sudo rm python ln -s /location/of/new/python python 现在,在准备写一个完全不同的问题,我想确认我的Ubuntu版本 lsb_release -a 但是我明白了 Traceback (most recent call last): File "/usr/bin/lsb_release", line 26, in <module> import lsb_release ImportError: No […]

内存通道

问题(背景): 我的目标是一台拥有四个内存通道和一个pcie卡的机器,我想尽可能快地传输数据。 考虑到卡在理论上可以每路传输大约8GB / s(7.88GB / s),这将导致大约15.8GB / s的吞吐量。 看这个,我知道我的最大内存传输速率是12.8GB /秒。 即使不考虑实际安装的内存,显然PCIe吞吐量也会超过一个内存通道的function。 为了避免这种情况,我想确保stream向设备的内存块I在与我收到的信道不同的信道上结束。 题 是否有可能在Linux内核的特定通道上分配内存,如果是这样的话,将使用什么接口? 是否有无法获得有关物理内存映射到不同渠道(哪些地址范围/页框在哪个渠道)的信息? 有没有一个接口来请求一个页面被移动到/分配在一个特定的框架? 如何确保页面在被换出/重新定位前被固定? (假设我必须做magic_allocate_page_on_channel(); get_user_pages(…)我有一个短暂的时间,页面可以(理论上)再次交换出来,并可能通过get_user_pages交换到不同的帧)

在计算单词代码时应用fork()和pipe()(或fifo())

我最后完成了字数统计的写作。 它统计文件中字的总数。 (即txt)。 现在,我想使用多个fork()来访问和读取每个文件。 我在上周学习了。 此外,我使用全局variables来保存计数字的数量。 据我所知,如果我应用fork(),使用全局variables分配为0.为了避免它,我试图使用mmap()和类似的function,这是okey。 但是,我也想用pipe()(如果可能的话)(fifo())进行通信(保存数字值)。 我使用nftw()函数去文件夹和文件。 我的逻辑是在下面的图片。 这个代码如何使用fork()和pipe()(fifo())? fork()对我来说真的很复杂,因为我缺乏经验。 我是新的使用pipe()和fork()。 根据我的想法,代码的逻辑是,如果我可以使用fork()和pipe(),将有fork()每个文件(即txt)并使用fork来访问它们。 如果有另一个文件夹并且有文件,则再次从创build的分叉创buildfork(),然后访问文件。 我试图解释下面的图。 谢谢。 我想学习使用它们。 int countInEveryFolder(const char *dir) 因为我不知道如何计算文件,直到nftw()函数中的下一个文件夹。 文件数是必要的,因为它是分号。 每个文件夹都应该是文件的父项。 文件包含在文件夹中。 码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/wait.h> #include <dirent.h> #include <errno.h> #include <ftw.h> #include <ctype.h> #include <sys/mman.h> #include <locale.h> #include <errno.h> […]

在Linux中计算内存区域的大小

我将不胜感激,如果有人可以帮助我做一些计算基于以下输出: init_memory_mapping: 0000000000000000-0000000037bfe000 0000000000 – 0000200000 page 4k 0000200000 – 0037a00000 page 2M 0037a00000 – 0037bfe000 page 4k kernel direct mapping tables up to 0x37bfdfff @ [mem 0x009fa000-0x009fffff] RAMDISK: 7d11f000 – 7fff0000 Allocated new RAMDISK: 34d2d000 – 37bfd661 Move RAMDISK from 000000007d11f000 – 000000007ffef660 to 34d2d000 – 37bfd660 ACPI: RSDP 000f9aa0 00014 (v00 ACPIAM) ACPI: […]

如何获得可靠的x86_64位linux系统的内存映射

我有一个非常简单的程序,添加2个variables写在C中。 我正在Linux机器上执行它。 我想查看程序执行过程中引用的所有内存引用/虚拟地址。 从程序中我得到虚拟地址(通过某种方式),但我不知道哪个地址属于用户空间,哪个属于内核空间。 我曾经使用过一些帮手(都没有达到目的): 获取Linux中每个设备的内存映射: sudo cat /proc/iomem 更多: sudo cat /proc/vmallocinfo 进程的内存映射: pmap -x pids 进程的内存区域: cat /proc/pid/maps 。 对于32位,我知道Linux只使用4段: KERNEL SPACE从[0xC000 0000] (3 GB)到[0xFFFF FFFF] (4 GB)的2段(代码和数据/堆栈) 用户空间从[0x0000 0000] (0 GB)到[0xBFFF FFFF] (3 GB)的2个段(代码和数据/堆栈) 但是我想知道64位的相似范围。 我的代码 #include <stdio.h> #include <stdlib.h> int main(){ int a = 1, b = 2, c; void *ptr; […]

进程使用的实际物理RAM

如何确定某个进程使用的实际物理RAM? 我可以查看/proc/PID/status VmRSS (或top的RES列)。 但是,对于使用同一个文件支持的多个映射的进程,这个数字是不正确的。 例如,下面的一段代码将几个区域映射到一个小的物理内存窗口中。 size_t window_size = …; // eg 128 MiB size_t total_size = …; // eg 4 TiB char path[] = "/dev/shm/window-XXXXXX"; int fd = mkstemp(path); ftruncate(fd, (off_t)window_size) void *data = mmap(NULL, total_size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0); for(ptrdiff_t offset = 0; offset < (ptrdiff_t)total_size; offset += window_size) { mmap( (void *)( […]

glibc 1.22 malloc(ptmalloc2)+ Poco(1.5.2)ThreadPool =非常慢?

代码使用Poco HTTPServer(+ ThreadPool)来处理multithreading中的REST请求(minThreads = 16,max = 128)。 该盒子有12个CPU,“处理请求”是指通过networking与DB或其他节点通话,所以事实上#threads> #cpus似乎是合理的。 另外,每个这样的请求都涉及JSON处理,并且通常很漂亮。 但是,服务器是无状态的,并且不保存caching,因此,当服务器空闲时,内存消耗必须很低。 现在,经过长时间的多客户端负载(testing之间暂停)之后,我观察到服务器性能开始下降的情况。 例如,开始时,每秒约有300个HTTP请求,并有8个并行客户端。 运行一天之后,它会在完全相同的请求上每秒显示60-80-100个请求。 没有数据被改变,请求是只读的。 这个条件是永久的,直到服务器重新启动,然后性能恢复正常。 内存消耗是合理的,没有观察到内存泄漏。 花了很多时间后,我设法弄清楚以下几点: 1)单线程加载不会降级 2)multithreading负载:在malloc()内部发生降级 – 我使用Linux的'perf'套件来查看大部分时间花费在这里: <….removed…> – 39.22% 39.22% SoLoader – _spin_lock – 55.86% futex_wake do_futex compat_sys_futex sysenter_dispatch – 0xb775f420 – 87.48% operator new(unsigned int) + 27.60% std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) + 11.59% operator new[](unsigned int) […]

pipe道输出从“超时”到“wc -l”失败

我正在计算给定时间内的所有按键。 目前我的代码如下所示: $ timeout -s 9 10s xinput test 8 | wc -l 这返回 Killed 而不是预期的按键次数。 当我运行没有pipe道超时输出如预期 $ timeout -s 9 20s xinput test 8 key release 36 key press 42 key release 42 key press 26 key release 26 key press 28 key release 28 key press 38 key release 38 key press 46 […]