Antworten
Die relevanten Systemaufrufe:
theon$ truss 2>truss.out tcpserver 0 22048 date & echo $! >truss.pid [1] 26452 theon$ sleep 1 [1]+ Exit 2 truss tcpserver 0 22048 date 2> truss.out theon$ kill -HUP $(cat truss.pid) && rm -f truss.pid bash: kill: (26452) - No such process theon$ kill $(ps | grep tcpserv | grep -v grep | awk '{ print $1 }') kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec] theon$ sed -n '/socket(PF_INET/,$p' truss.out && rm -f truss.out theon$
Wie hieran zu erkennen ist, wartet tcpserver in accept. Der erste Parameter ist ein Dateideskriptor, der zuvor mit einem socket-Systemaufruf („sosocket“ in der Ausgabe von truss) erzeugt wurde und anschließend u.a. mit setsockopt, bind und listen_ vorbereitet wurde.
Der kleine Netzwerkdienst:
theon$ tcpserver 0 22049 /bin/sh -c 'echo $TCPREMOTEIP' & echo $! >service.pid [1] 26464 theon$
heim$ telnet theon 22049 telnet: Unable to connect to remote host: Connection refused Trying 134.60.66.7... heim$
theon$ kill $(cat service.pid) && rm -f service.pid bash: kill: (26464) - No such process theon$