Articles of pipe理员

Linux乐观的malloc:当内存不足时总是会抛出新的东西?

我一直在阅读有关Linux上的内存不足的情况,手册页中的以下段落让我想到: 默认情况下,Linux遵循乐观的内存分配策略。 这意味着当malloc()返回非NULL时,不能保证内存真的可用。 这是一个非常糟糕的错误。 如果事实certificate系统内存不足,一个或多个进程将被臭名昭着的OOM杀手杀死。 […] 考虑到操作者的新实现最终会在某个时候调用malloc,有没有什么保证新的实际上会扔在Linux上呢? 如果没有,如何处理这个明显无法察觉的错误情况?

C程序在Linux上耗尽内存

我想编写一个程序来消耗所有可用的内存来理解结果。 我听说linux一旦无法分配内存就开始查杀进程。 任何人都可以帮助我这样一个程序。 我已经写了下面的内容,但是内存似乎没有用尽: #include <stdlib.h> int main() { while(1) { malloc(1024*1024); } return 0; }

在linux中的内存分配是否无阻塞?

我很好奇,知道是否使用默认的新运算符分配内存是一个非阻塞操作。 例如 struct Node { int a,b; }; … Node foo = new Node(); 如果多个线程试图创build一个新的节点,并且如果其中一个线程在分配过程中被操作系统暂停,是否会阻止其他线程的进展? 我问的原因是因为我有一个并发的数据结构,创build新的节点。 然后我修改了algorithm来回收节点。 这两种algorithm的吞吐量性能在24核心机器上几乎是相同的。 然后,我创build了一个在所有系统内核上运行的干扰程序,以便尽可能多地创build操作系统。 创build新节点的algorithm的吞吐量性能相对于再循环节点的algorithm减less了5倍。 我很想知道为什么会发生这种情况。 谢谢。 *编辑:指向我的Linux内存分配器的代码也将有所帮助。 我试图在发布这个问题之前寻找,但无法find它。

如何处理Linux / Python的依赖关系?

由于缺乏对一些我想使用的库的支持,我将一些Python开发从Windows移植到了Linux开发中。 我花了大半天的时间搞乱依赖关系。 这个问题 每当我拿起Linux时,通常会遇到某种依赖性问题,通常是使用开发库,无论它们是通过apt-get,easy_install还是pip安装的。 我可以浪费时间在简单的任务上,花更多的时间在图书馆工作,而不是写代码。 我在哪里可以学习处理这些问题的策略,而不是漫无目的地用Googlesearch一个遇到同样问题的人呢? 一个例子 只是一个例子:我想要生成一些QR码。 所以,我想我会使用基于pyqrcode.sourceforge.net github.com/bitly/pyqrencode,但据说没有Java的依赖。 还有其他的( pyqrnative , github.com/ Arachnid / pyqrencode ),但是这似乎是我需要的最好的select。 所以,我在pypi上find了这个软件包,并且认为使用这个软件包会让生活更轻松: (通过使用virtualenv使事情保持整洁,我可能使自己的生活变得更加困难。) (myenv3)mat@ubuntu:~/myenv3$ bin/pip install pyqrencode Downloading/unpacking pyqrencode Downloading pyqrencode-0.2.tar.gz Running setup.py egg_info for package pyqrencode Installing collected packages: pyqrencode Running setup.py install for pyqrencode building 'qrencode' extension gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes […]

如何强制程序出现内存不足?

我有一个C / C ++程序可能会挂在内存不足时。 我们通过同时运行多个副本来发现这一点。 我想debugging程序,而不会完全破坏开发机器的性能。 有没有办法限制可用的内存,以便一个新的或malloc将返回一个NULL指针之后,比如500K的内存已被请求?

为Linux创build一个窗口pipe理器

我想创build一个简单的堆栈窗口pipe理器( C )供个人使用,主要是为了学习和挑战自己。 我已经通过twm的源代码进行了研究,这个代码有相对较less的花里胡哨的function,但由于它不是基于widget工具箱,所以它看起来很低级。 1会使用GTK +等工具包吗? 恐怕twm中的一些代码和库可能太陈旧了( 编辑:已弃用),我希望窗口pipe理器使用相对现代的库。 为了理解,我也会对如何从头开始一个窗口pipe理器的build议感兴趣 – 这个目的没有太多的教程。 更新:对于那些想到类似项目的人:我最终使用了Common Lisp和CLX库 。 tinywm-lisp作为一个基础和灿烂的CLFSWM和树桩是一个很大的帮助。 作为参考,我使用了Freenode上的CLX – Common LISP X接口 ( PDF警告 )和#xlib 。

bash:按列分割命令的输出

我想做这个: 运行一个命令 捕获输出 select一条线 select该行的一列 举一个例子,假设我想从$PID获取命令名(请注意,这只是一个例子,我并不是说这是从进程id获取命令名的最简单的方法 – 我真正的问题是另一个命令的输出格式,我无法控制)。 如果我运行ps我得到: PID TTY TIME CMD 11383 pts/1 00:00:00 bash 11771 pts/1 00:00:00 ps PID TTY TIME CMD 11383 pts/1 00:00:00 bash 11771 pts/1 00:00:00 ps 现在我做ps | egrep 11383 ps | egrep 11383并得到 11383 pts/1 00:00:00 bash 下一步: ps | egrep 11383 | cut -d" " -f […]

打击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理器软件。 这是可以做的事情,或者我必须手动查找包依赖关系。