From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S262862AbVHEFsZ (ORCPT ); Fri, 5 Aug 2005 01:48:25 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262863AbVHEFsZ (ORCPT ); Fri, 5 Aug 2005 01:48:25 -0400 Received: from tsukuba.m17n.org ([192.47.44.130]:18385 "EHLO tsukuba.m17n.org") by vger.kernel.org with ESMTP id S262862AbVHEFsX (ORCPT ); Fri, 5 Aug 2005 01:48:23 -0400 To: linux-kernel@vger.kernel.org Subject: 2.6 select doesn't notify readablity of /proc/loadavg. MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII From: Tanaka Akira Date: Fri, 05 Aug 2005 14:47:59 +0900 Message-ID: <87ll3hszmi.fsf@m17n.org> User-Agent: T-gnus/6.15.7 (based on Oort Gnus v0.08) SEMI/1.14.6 (Maruoka) FLIM/1.14.6 (Marutamachi) APEL/10.6 Emacs/21.4 (i386-pc-linux-gnu) MULE/5.0 (SAKAKI) Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Hi. select in Linux 2.6.12.3 doesn't notify readability of /proc/loadavg and several other files under /proc. It is reproducible as follows. The sample program follow blocks because select doesn't notify readability. % uname -a Linux debiansarge 2.6.12.3 #1 Thu Aug 4 20:23:16 JST 2005 i686 GNU/Linux % cat /proc/version Linux version 2.6.12.3 (akr@debiansarge) (gcc version 3.3.5 (Debian 1:3.3.5-13)) #1 Thu Aug 4 20:23:16 JST 2005 % cat t.c #include #include #include #include #include int main(int argc, char **argv) { int fd, ret; fd_set readfds; fd = open(argv[1], O_RDONLY); if (fd == -1) { perror("open"); exit(1); } FD_ZERO(&readfds); FD_SET(fd, &readfds); ret = select(fd+1, &readfds, NULL, NULL, NULL); printf("select returns %d\n", ret); return 0; } % gcc t.c % ./a.out /proc/loadavg This program blocks here. /proc/loadavg can be read by cat. % ./a.out /proc/loadavg ^C % cat /proc/loadavg 0.00 0.00 0.00 2/36 2597 Also, /proc/cmdline, /proc/devices, /proc/execdomains, /proc/fb, /proc/filesystems, /proc/locks, /proc/meminfo, /proc/uptime and /proc/version are blocks too. Is this behaviour intentional? The output of ver_linux is follows. % sh scripts/ver_linux If some fields are empty or look unusual you may have an old version. Compare to the current minimal requirements in Documentation/Changes. Linux debiansarge 2.6.12.3 #1 Thu Aug 4 20:23:16 JST 2005 i686 GNU/Linux Gnu C 3.3.5 Gnu make 3.80 binutils 2.15 util-linux 2.12p mount 2.12p module-init-tools 3.2-pre1 e2fsprogs 1.37 reiserfsprogs line reiser4progs line nfs-utils 1.0.6 Linux C Library 2.3.2 Dynamic linker (ldd) 2.3.2 Procps 3.2.1 Net-tools 1.60 Console-tools 0.2.3 Sh-utils 5.2.1 Modules Loaded md5 ipv6 evdev ehci_hcd usbcore shpchp pci_hotplug intel_agp piix pcnet32 mii crc32 agpgart ide_disk ide_cd cdrom ide_core rtc unix Note that select notify readability of /proc/loadavg on Linux 2.4.20. % uname -a Linux serein 2.4.20-686 #1 Mon Jan 13 22:22:30 EST 2003 i686 GNU/Linux % ./a.out /proc/loadavg select returns 1 -- Tanaka Akira