Articles of pipe理员

打击pipe道处理

有谁知道bash如何处理通过pipe道发送数据? cat file.txt | tail -20 该命令是否将file.txt的所有内容打印到缓冲区中,然后通过尾部读取? 或者是这个命令,比如说,将file.txt的内容一行一行地打印出来,然后在每一行中暂停处理,然后请求更多的数据? 我问的原因是我正在一个embedded式设备上编写一个程序,该程序基本上对一些数据块执行一系列的操作,其中一个操作的输出作为下一个操作的input被发送。 我想知道linux(bash)如何处理这个问题,所以请给我一个一般的答案,不是特别是当我运行“cat file.txt | tail -20”时会发生什么情况。 预先感谢您的回复! 编辑:Shog9指出了相关的维基百科文章,这并没有直接引导我的文章,但它帮助我find这个: http : //en.wikipedia.org/wiki/Pipeline_%28Unix%29#Implementation哪些有我正在寻找的信息。 我很抱歉没有说清楚。 当然,你正在使用一个pipe道,当然你正在使用命令的各个部分的标准input和标准输出。 我认为这太明显,不能说明。 我在问的是如何处理/实施。 由于这两个程序不能同时运行,数据如何从标准input发送到标准输出? 如果第一个程序产生的数据比第二个程序快得多,会发生什么? 系统是否运行第一个命令,直到终止或stdout缓冲区已满,然后转到下一个程序,依此类推,直到没有更多的数据需要处理或者存在更复杂的机制?

Linux为什么我不能find结果rm?

对不起,如果这是一个noobie问题,但我找不到一个好的答案。 find然后删除我可以使用的东西 find . -name ".txt" -exec rm "{}" \; 但是,为什么我不能把结果灌输给他们呢? find . -name ".txt" | rm 就像我会pipe它grep find . -name ".txt" | grep a 我从某个地方读过,rm不会从stdin那里得到input,所以我不能pipe它,但那是什么意思? 当我inputrm a.txt时,它会从标准input读取,就像我可以正确的grep? 或者stdin和命令行有区别。 帮帮我!

如何在Linux上列出软件包的所有依赖关系?

你如何列出一个软件包在Linux上的所有依赖项? 例如: GNU Make Package 有没有什么命令可以列出软件包的依赖关系? 我没有任何软件包pipe理器,因此我不能使用apt-rdepends或dpkg 。 我需要列出任何软件包依赖关系,而不使用软件包pipe理器软件。 这是可以做的事情,或者我必须手动查找包依赖关系。

你为什么要在linux中closurespipe道?

当使用pipe道进行过程 – 过程交stream时,closurespipe道一端的目的是什么? 例如: 如何使用pipe道在两个程序之间发送一个简单的string? 请注意,pipe道的一端在subprocess和父进程中closures。 为什么这是必需的?

如何列出连接到Linux共享内存段的进程?

如何确定哪个进程连接到共享内存段? awagner@tree:/home/awagner$ ipcs -m —— Shared Memory Segments ——– key shmid owner perms bytes nattch status 0x00000000 0 root 777 102400 1 0x00000000 32769 root 774 96 1 dest 0x00000000 98306 awagner 600 393216 2 dest 0x00000000 131075 awagner 600 393216 2 dest 即我如何确定哪两个进程连接到shmid 98306?

何时使用pipe道与何时使用共享内存

我正在阅读各种IPC机制。 我试图找出场景,我们使用共享内存和我们使用命名pipe道(FIFO)的地方。 pipe道:多个进程可以写入,但只有一个进程可以读取。 写操作是primefaces的。 共享内存:多个进程可以读写。 而且用户需要提供互斥的读写。 这是共享内存和pipe道的唯一区别吗?

基于Linux的程序

为这个写一个程序>>>>>> 一个程序将打开一个pipe道,写一个数字给pipe道。 其他程序将打开相同的pipe道,将读取数量并打印它们。 closures这两个pipe道。 我怎么能写一个基于这个任何一个知道的程序,然后请帮助我… !!!!

Linux上ru_maxrss的单位是什么?

这是来自man getrusage struct rusage { struct timeval ru_utime; /* user time used */ struct timeval ru_stime; /* system time used */ long ru_maxrss; /* maximum resident set size */ long ru_ixrss; /* integral shared memory size */ long ru_idrss; /* integral unshared data size */ long ru_isrss; /* integral unshared stack size */ long ru_minflt; […]

为什么malloc依赖于从某个阈值开始的mmap?

我正在读一些关于malloc的信息,并在malloc的手册页中find了以下内容: 通常,malloc()从堆中分配内存,并根据需要使用sbrk(2)调整堆的大小。 当分配大于MMAP_THRESHOLD字节的内存块时,glibc malloc()实现使用mmap(2)将内存分配为专用匿名映射。 MMAP_THRESHOLD默认为128 kB,但可以使用mallopt(3)进行调整。 使用mmap(2)执行的分配不受RLIMIT_DATA资源限制的影响(请参阅getrlimit(2))。 所以基本上从阈值MMAP_THRESHOLD malloc开始使用mmap开始。 有没有任何理由切换到大块的mmap? 这可能会影响stream程执行的性能吗? mmap系统调用是否强制上下文切换?

哪些片段受到写入时拷贝的影响?

我对“ 写时复制 ”的理解是:“每个人在写入之前都有一个相同数据的共享副本,然后进行复制”。 是由堆和bss段组成的相同数据的共享副本还是仅堆? 哪些内存段将被共享,这是依赖于操作系统?