All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Michael Kerrisk" <mtk-lkml@gmx.net>
To: Roland McGrath <roland@redhat.com>
Cc: torvalds@osdl.org, jakub@redhat.com, akpm@osdl.org,
	drepper@redhat.com, linux-kernel@vger.kernel.org,
	michael.kerrisk@gmx.net, tonnerre@thundrix.ch
Subject: Re: [PATCH] waitid system call
Date: Wed, 1 Sep 2004 13:31:01 +0200 (MEST)	[thread overview]
Message-ID: <30643.1094038261@www19.gmx.net> (raw)
In-Reply-To: 200408312351.i7VNp28j001804@magilla.sf.frob.com

Just for completeness, I've updated the table below to include 
the AIX 5.2 result fro Eric Dumazet, and a Unixware result 
that I've also now got.  Unixware is like most other 
implementations, in zeroing out the siginfo_t structure 
when WNOHANG has no waitable children.

Cheers,

Michael

           Linux   Tru64   Solaris  HP-UX  Irix  AIX  U/Ware
           2.6.8.1  5.1       8      11    6.5   5.2  
           +waitid
si_pid     y.      y*      y*       y      y*    y.   y*
si_uid     y.      n* [1]  n* [2]   n [1]  n*    n.   n*
si_signo   y.      y*      y*       y      y*    y.   y*
si_status  y.      y*      y*       y      y#    y.   y*
si_code    y.      y*      y*       y      y*    y.   y*
si_errno   ?.      ?*      ?*       ?      ?*    ?.   ?*
si_stime   n.      n*      y* [3]   -      n#    -    -
si_utime   n.      n*      y* [3]   -      n*    -    -

Key
---

The first character in each table cell indicates whether
waitid() sets the field on this platform:

    y   this field is set on this platform

    n   this field is not set on this platform

    ?   there is insufficient information to determine if
        this field is meaningfully set on this platform

    -   this field is not available on this platform

    NOTE: The given test does not reveal whether si_errno is 
          meaningfully set on any platform (and I haven't 
          examined the header files sufficiently closely 
          enough to check if any further details can be 
          determined).  Offhand, I can't think of any 
          circumstances where it could be meaningful with 
          waitid().)

The second character in each table cell indicates (if present) 
how the field is treated when a WNOHANG operation is performed
and there is no child in a waitable state

    .   the field is left unchanged

    *   the field is explicitly initialized to 0

        NOTE: the Linux behaviour has now changed with the 
        more recent patch that DOES zero out the fields when 
        WNOHANG has no waitable children.

    #   the field is initialized to some random value 
        (i.e., something I don't understand) 

    NOTE: WNOHANG is broken on HP/UX 11 – if there are no 
          children that have yet terminated, waitid() fails 
          with the error ECHILD.

Notes to table:

[1] On Tru64 5.1 and HP-UX 11, si_uid is not meaningful, 
    but coincides with si_status, so a value is filled in.

[2] On Solaris 8, si_uid is not meaningful, but coincides with 
    si_utime, so a value is filled in.

[3] On Solaris 8, the si_stime and si_utime fields 
    return values in centiseconds.


Summary points
--------------

1. On most other implementations (other than AIX), when WNOHANG 
   is specified, all fields of the siginfo_t structure are 
   returned zeroed out if no child is in a waitable state, 
   with the following exceptions:

       WNOHANG on HP-UX is broken as noted above.  

       On Irix 6.5, si_status and si_stime are filled in
       with some unexplained values; the remaining fields
       are zeroed out.

2. All waitpid() implementations support si_pid, si_signo,
   si_status, and si_code.

3. Only Linux supports si_uid (and the rusage fields, which
   weren't employed in this test).

4. Solaris is the only implementation that supports 
   si_stime and si_utime.

Actual runs on the various platforms are shown below.

Cheers,

Michael

===========

Linux 2.6.8.1 + waitid patch

$ ./a.out escHi 1 3
Linux tekapo 2.6.8.1 #1 Wed Aug 18 11:04:01 CEST 2004 i686 i686 i386
GNU/Linux
child 1 PID=8208 started
child 2 PID=8209 started
0.04: waitid() returned 0
        si_pid=99; si_uid=99; si_signo=99;
        si_status=99; si_code=99 (????); si_errno=99;
        si_stime=99; si_utime=99;
0.54: waitid() returned 0
        si_pid=99; si_uid=99; si_signo=99;
        si_status=99; si_code=99 (????); si_errno=99;
        si_stime=99; si_utime=99;
child 1 PID=8208 finished
1.04: waitid() returned 0
        si_pid=8208; si_uid=500; si_signo=17;
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0;
        si_stime=99; si_utime=99;
1.55: waitid() returned 0
        si_pid=99; si_uid=99; si_signo=99;
        si_status=99; si_code=99 (????); si_errno=99;
        si_stime=99; si_utime=99;
2.05: waitid() returned 0
        si_pid=99; si_uid=99; si_signo=99;
        si_status=99; si_code=99 (????); si_errno=99;
        si_stime=99; si_utime=99;
2.55: waitid() returned 0
        si_pid=99; si_uid=99; si_signo=99;
        si_status=99; si_code=99 (????); si_errno=99;
        si_stime=99; si_utime=99;
child 2 PID=8209 finished
3.05: waitid() returned 0
        si_pid=8209; si_uid=500; si_signo=17;
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0;
        si_stime=99; si_utime=99;
3.55: waitid: No child processes

===========

Tru64 5.1

[I have no explanation for the odd si_errno setting on the 
first call below.]

$ ./a.out escHi 1 3
OSF1 spe206.testdrive.hp.com V5.1 2650 alpha
child 1 PID=1884812 started
0.01: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0;
        si_status=0; si_code=0 (????); si_errno=-1024;
        si_stime=0; si_utime=0;
child 2 PID=1885104 started
0.53: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0;
        si_status=0; si_code=0 (????); si_errno=0;
        si_stime=0; si_utime=0;
child 1 PID=1884812 finished
1.03: waitid() returned 0
        si_pid=1884812; si_uid=22; si_signo=20;
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0;
        si_stime=0; si_utime=0;
1.53: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0;
        si_status=0; si_code=0 (????); si_errno=0;
        si_stime=0; si_utime=0;
2.03: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0;
        si_status=0; si_code=0 (????); si_errno=0;
        si_stime=0; si_utime=0;
2.53: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0;
        si_status=0; si_code=0 (????); si_errno=0;
        si_stime=0; si_utime=0;
child 2 PID=1885104 finished
3.03: waitid() returned 0
        si_pid=1885104; si_uid=22; si_signo=20;
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0;
        si_stime=0; si_utime=0;
3.54: waitid: No child processes

===========

HP-UX 11

[WNOHANG is broken on this platform]

$ ./a.out escHi 1 3
HP-UX spe192 B.11.11 U 9000/800 1839940656 unlimited-user license
child 2 PID=5729 started
child 1 PID=5728 started
0.03: waitid: No child processes
$ child 1 PID=5728 finished
child 2 PID=5729 finished

./a.out esci 1 3
HP-UX spe192 B.11.11 U 9000/800 1839940656 unlimited-user license
child 1 PID=5733 started
child 2 PID=5734 started
child 1 PID=5733 finished
1.01: waitid() returned 0
        si_pid=5733; si_uid=22; si_signo=18;
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0;
child 2 PID=5734 finished
3.01: waitid() returned 0
        si_pid=5734; si_uid=22; si_signo=18;
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0;
3.01: waitid: No child processes

===========

Solaris 8

$ ./a.out escHi 1 3
SunOS sunbode6 5.8 Generic_108528-14 sun4u sparc SUNW,Ultra-4
child 1 PID=20682 started
0.02: child 2 PID=20683 started
waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0;
        si_status=0; si_code=0 (????); si_errno=0;
        si_stime=0; si_utime=0;
0.52: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0;
        si_status=0; si_code=0 (????); si_errno=0;
        si_stime=0; si_utime=0;
child 1 PID=20682 finished
1.03: waitid() returned 0
        si_pid=20682; si_uid=80; si_signo=18;
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0;
        si_stime=20; si_utime=80;
1.54: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0;
        si_status=0; si_code=0 (????); si_errno=0;
        si_stime=0; si_utime=0;
2.05: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0;
        si_status=0; si_code=0 (????); si_errno=0;
        si_stime=0; si_utime=0;
2.56: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0;
        si_status=0; si_code=0 (????); si_errno=0;
        si_stime=0; si_utime=0;
child 2 PID=20683 finished
3.07: waitid() returned 0
        si_pid=20683; si_uid=239; si_signo=18;
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0;
        si_stime=61; si_utime=239;
3.58: waitid: No child processes

===========

Irix 6.5

$ ./a.out escHi 1 3
IRIX64 max 6.5 04091957 IP30
child 1 PID=62684 started
child 2 PID=62704 started
0.04: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=809598976; si_code=0 (????); si_errno=0; 
        si_stime=-1476395008; si_utime=0; 
0.59: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=4; si_code=0 (????); si_errno=0; 
        si_stime=-1476395008; si_utime=0; 
child 1 PID=62684 finished
1.10: waitid() returned 0
        si_pid=62684; si_uid=0; si_signo=18; 
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0; 
        si_stime=0; si_utime=0; 
1.61: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=4; si_code=0 (????); si_errno=0; 
        si_stime=-1476395008; si_utime=0; 
2.12: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=4; si_code=0 (????); si_errno=0; 
        si_stime=-1476395008; si_utime=0; 
2.63: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=4; si_code=0 (????); si_errno=0; 
        si_stime=-1476395008; si_utime=0; 
child 2 PID=62704 finished
3.14: waitid() returned 0
        si_pid=62704; si_uid=0; si_signo=18; 
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0; 
        si_stime=0; si_utime=0; 
3.65: waitid: No child processes

===========

AIX 5.2

# ./waitid_test escHi 1 3
AIX aix610p-ref 2 5 005FD96A4C00
child 1 PID=25204 started
child 2 PID=26944 started
0.03: waitid() returned 0
si_pid=99; si_uid=99; si_signo=99;
si_status=99; si_code=99 (????); si_errno=99;
0.53: waitid() returned 0
si_pid=99; si_uid=99; si_signo=99;
si_status=99; si_code=99 (????); si_errno=99;
child 1 PID=25204 finished
1.03: waitid() returned 0
si_pid=25204; si_uid=0; si_signo=20;
si_status=22; si_code=10 (CLD_EXITED); si_errno=0;
1.53: waitid() returned 0
si_pid=99; si_uid=99; si_signo=99;
si_status=99; si_code=99 (????); si_errno=99;
2.03: waitid() returned 0
si_pid=99; si_uid=99; si_signo=99;
si_status=99; si_code=99 (????); si_errno=99;
2.53: waitid() returned 0
si_pid=99; si_uid=99; si_signo=99;
si_status=99; si_code=99 (????); si_errno=99;
child 2 PID=26944 finished
3.03: waitid() returned 0
si_pid=26944; si_uid=0; si_signo=20;
si_status=22; si_code=10 (CLD_EXITED); si_errno=0;
3.53: waitid: No child processes

===
Unixware

$ ./a.out escHi 1 3

UNIX_SV shaft 4.2MP 2.1.1 i386 x86at
0.03: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=0; si_code=0 (????); si_errno=0; 
child 2 PID=13756 started
child 1 PID=13755 started
0.53: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=0; si_code=0 (????); si_errno=0; 
1.03: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=0; si_code=0 (????); si_errno=0; 
child 1 PID=13755 finished
1.53: waitid() returned 0
        si_pid=13755; si_uid=0; si_signo=18; 
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0; 
2.03: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=0; si_code=0 (????); si_errno=0; 
2.53: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=0; si_code=0 (????); si_errno=0; 
3.03: waitid() returned 0
        si_pid=0; si_uid=0; si_signo=0; 
        si_status=0; si_code=0 (????); si_errno=0; 
child 2 PID=13756 finished
3.53: waitid() returned 0
        si_pid=13756; si_uid=0; si_signo=18; 
        si_status=22; si_code=1 (CLD_EXITED); si_errno=0; 
4.03: waitid: No child processes

-- 
Supergünstige DSL-Tarife + WLAN-Router für 0,- EUR*
Jetzt zu GMX wechseln und sparen http://www.gmx.net/de/go/dsl


  reply	other threads:[~2004-09-01 11:31 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-15 23:03 [PATCH] waitid system call Roland McGrath
2004-08-16  5:40 ` Roland McGrath
2004-08-16 17:15   ` Michael Kerrisk
2004-08-16 21:12     ` Roland McGrath
2004-08-19 17:20       ` Michael Kerrisk
2004-08-19 20:53         ` Roland McGrath
2004-08-20  6:00           ` Michael Kerrisk
2004-08-20  9:02             ` Michael Kerrisk
2004-08-20 20:04               ` Roland McGrath
2004-08-24 11:51                 ` Michael Kerrisk
2004-08-31  6:04                   ` Roland McGrath
2004-08-31  6:26                     ` Jakub Jelinek
2004-08-31  6:37                       ` Roland McGrath
2004-08-31  6:40                       ` Andrew Morton
2004-08-31 15:53                         ` Bill Davidsen
2004-08-31 18:26                       ` Linus Torvalds
2004-08-31 23:51                         ` Roland McGrath
2004-09-01 11:31                           ` Michael Kerrisk [this message]
2004-08-31  7:22                     ` Michael Kerrisk
2004-08-22  8:53               ` Tonnerre
     [not found] <2tCiy-8pK-13@gated-at.bofh.it>
2004-08-16  0:03 ` Andi Kleen
2004-08-16  2:10   ` Roland McGrath

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=30643.1094038261@www19.gmx.net \
    --to=mtk-lkml@gmx.net \
    --cc=akpm@osdl.org \
    --cc=drepper@redhat.com \
    --cc=jakub@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=michael.kerrisk@gmx.net \
    --cc=roland@redhat.com \
    --cc=tonnerre@thundrix.ch \
    --cc=torvalds@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.