当我的 Linux 系统接近分页时(即,在我的情况下,16GB ram 几乎已满,16GB 交换完全空),如果新进程 X 尝试分配一些内存,系统将完全锁定。也就是说,直到不成比例的页面数量(与 X 的内存分配请求的总大小和速率)被换出。请注意,不仅 gui 变得完全没有响应,而且甚至像 sshd 这样的基本服务也完全被阻止。
这是我用来以更“科学”的方式触发这种行为的两段代码(诚然粗糙)。第一个从命令行获取两个数字 x,y 并继续分配和初始化多个 y 字节块,直到分配的总字节数超过 x 为止。然后无限期地睡觉。这将用于使系统处于寻呼的边缘。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char** argv) {
long int max = -1;
int mb = 0;
long int size = 0;
long int total = 0;
char* buffer;
if(argc > 1)
{
max = atol(argv[1]);
size = atol(argv[2]);
}
printf("Max: %lu bytes\n", max);
while((buffer=malloc(size)) != NULL && total < max) {
memset(buffer, …Run Code Online (Sandbox Code Playgroud) 在 Gentoo Linux 机器上,一个进程通过串行端口 ( /dev/ttyS1)与另一台计算机通信。我想在不进一步干扰的情况下收听此通信(即进程发送/接收的内容)。
如何仅使用基本的 Linux 工具来实现这一目标?我什至可以更改进程正在与之通信的串行端口,所以也许我可以“快捷地”两个设备(/dev/ttyS1和/dev/xxx)侦听所有通信,当所有输出/dev/ttyS1都转发到时/dev/xxx,反之亦然。但是我该怎么做呢?有什么socat?