Articles of pipe理员

只有在非交互式运行bash脚本时才会出现错误“cat:write error:Broken pipe”

我写了一个bash脚本,在这里我定义了一个variables: var=$(cat $file_path | head -n $var2 | tail -n 1 | cut -f1) 其中$file_path只是包含文件的path, $var2是一个int,例如1或2.因此该variables被分配了文件行号var2的第一个字段的值。 当我从命令行运行它时,它工作得很好。 但是,运行包含此命令的脚本时,出现错误“cat:write error:Broken pipe”。 任何想法,为什么? 任何build议真的很感激!

如何判断内存在Linux中的位置

我有一个长期运行的过程,我怀疑有内存泄漏。 我使用top来监视每个进程的内存级别,没有使用超过总RAM的15%。 该机器有4GB的RAM,并开始超过3GB的免费。 这个过程本身对几MB的数据进行非常繁重的自定义计算。 它需要100%的单核。 随着时间的推移,记忆消失,但top并不怪我长时间运行的过程。 相反,“caching”和“缓冲”内存增加,“空闲”内存降低到2MB。 这个过程最终完成了它的工作,没有问题退出,但记忆永远不会回来。 我应该关心还是这个“正常”? 除了top还有其他的工具可以提供更深入的理解吗? 谢谢。

在Unix上分离命令行输出(处理和用户交互)的方法是什么?

我正在编写一个控制台应用程序,其中可能需要用户交互(提示键盘input,cli参数等),但我想保持它与处理的结果分开(它以一种方式可以通过pipe道连接到其他应用程序)。 我怎么能做到这一点,如果我不能只是发送所有与用户交互cerr(不是一切都是错误的)?

使用Linux pipe的过程编程模型()

从http://pubs.opengroup.org/onlinepubs/009604599/functions/pipe.html : pipe()函数将创build一个pipe道,并将两个文件描述符分别放入参数fildes [0]和fildes [1]中,这些参数指向pipe道的读写端的打开文件描述。 有一个父母将数据写入其子的例子: int fildes[2]; const int BSIZE = 100; char buf[BSIZE]; ssize_t nbytes; int status; status = pipe(fildes); if (status == -1 ) { /* an error occurred */ … } switch (fork()) { case -1: /* Handle error */ break; case 0: /* Child – reads from pipe */ close(fildes[1]); […]

在安装NGiNX时,我应该使用另一个用户而不是root用户

我想知道使用一个子用户来安装NGiNX会更好。 这是真的吗? 我正在考虑使用NGiNX来安装我的客户可以在那里使用的虚拟主机,我不希望他们对NGiNX有太多的控制。 我正在使用Ubuntu Linux发行版。 提前感谢任何帮助和/或提示。

是否有任何API或方法来防止dynamic分配的内存上的读取访问(和写入)?

是否有任何API或方法来防止dynamic分配的内存上的读取访问? char *ptr = malloc(4);` strcpy(ptr, "Hello");` 现在,我想ptr没有读取权限和写保护。 如何做到这一点? 我不希望使用mprotect因为它会期望ptr指向映射的内存,并且每次都可能无法使用dynamic内存。

我怎么能告诉一个线程,目前或将很快被阻止在poll()做某事?

我有一个线程A在循环中调用poll() 。 此线程负责传入和传出连接上的IO。 但是,当线程B打开一个传出连接时,它必须以某种方式将它给予A. 你认为在打开套接字后B写入的线程A(读取面)和B(写入面)之间有一个pipe道是个好主意吗?

限制内核可以使用“mem”环境variablespipe理多less物理内存

我inheritance了一些Linux内核驱动程序(我的经验非常有限)。 我的问题如下。 这是一个embedded式的环境,硬件有512MB的物理内存。 但是,传递给内核的引导参数通过使用variableslinuxMem = mem = 256M将内存限制为256MB。 在我对这个环境variables的研究中,我了解到这限制了内核可以pipe理的内存量为256MB。 然而,在运行在我的目标上的一些应用程序代码中,我看到了/ dev / mem的打开以及返回的文件描述符的后续mmap,mmap调用的offset参数位于256MB的物理内存中。 而事情似乎工作正常。 所以我的问题是“如果内核据说不知道上面的256MB,为什么它能工作?”

一个进程已经启动后,grep过滤输出?

通常情况下,当我们想要从运行某个东西看特定的输出线时,可以这样做: ./a.out | grep IHaveThisString 但是如果IHaveThisString是每次都改变的东西,所以你需要先运行它,观察输出来捕获IHaveThisString在特定的运行,然后grep出来? 我可以转储到文件和后来的grep,但是有可能做一些像背景的东西,然后把它带到前台,把它带回来,但现在pipe道到一些grep? 类似于: ./a.out Ctrl-Z fg | grep NowIKnowThisString 就是想..

stream水线如何工作?

有人可以解释命令ls | grep 'xxx'在内部实际发生了什么(系统调用称为) ls | grep 'xxx' ?