在终端使用ulimit -a命令
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31384
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 31384
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
会显示出当前系统各种参数上限,pipesize一项返回是8,单位是512bytes,也就是4K。
在 Linux 系统中,管道的缓冲区大小是有限的,一般为 4KB 或 64KB,取决于系统的实现和版本。这个缓冲区大小是内核中的一个常量,需要注意的是,管道的缓冲区大小对应的是单个写操作和单个读操作的数据量,而不是整个管道的数据量。如果写入的数据量超过了管道缓冲区的大小,写操作可能会被阻塞,直到有足够的空间来存储数据。同样地,读取操作也可能会被阻塞,直到有数据可读。在使用管道进行进程间通信时,需要注意管道缓冲区的大小限制,以避免数据丢失或阻塞等问题。
如果一次性写入4K数据,管道会塞满,写阻塞。
1. 当管道中无数据时,读操作阻塞;当管道中无数据的时候,将写端关闭,读操作立即返回
2. 当管道中,写满(64k)数据时,写操作阻塞,必须空出4k的空间,写操作继续,直到写满为止。
3. 将读端关闭,如果继续进。行写操作,会导致管道破裂,内核会向进程发送SIGPIPE信号(通常为Broken pipe)。