busybox 'udhcpc kann nicht beendet werden

966
Th. Thielemann

Auf einem Linux-Gerät mit busybox verwende ich die folgenden / etc / network / schnittstellen

... # Wired interface eth0 is using dhcp, enabled while system start auto eth0 iface eth0 inet dhcp pre-up [ -n "$(cat /var/run/udhcpc.eth0.pid 2> /dev/null)" ] && \  kill -9 $(cat /var/run/udhcpc.eth0.pid) || true pre-up /bin/grep -v -e "ip=[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+\\.[0-9]\\+" \  /proc/cmdline > /dev/null post-down [ -n "$(cat /var/run/udhcpc.eth0.pid 2> /dev/null)" ] && \ kill -15 $(cat /var/run/udhcpc.eth0.pid) || true  post-down ip addr flush dev eth0 || true 

Aber auf ifdown eth0 funktioniert der Kill -15 für udhcpc nicht. Ich habe daher den Pre-Up- Kill -9 hinzugefügt .

Dies geschieht nicht nur im Fall von ifup / ifdown, sondern auch, wenn ich versuche, die udhcp-Kommandozeile danach zu beenden.

Ist das ein häufiges Problem? Lohnt es sich, über den Unterschied zwischen kill -15 und kill -9 bei udhcpc nachzudenken?

strace:

> strace kill -15 2110 execve("/bin/kill", ["kill", "-15", "2110"], [/* 15 vars */]) = 0 brk(0) = 0x8e000 uname() = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f59000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory) open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3 fstat64(3, ) = 0 mmap2(NULL, 14548, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6f55000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/arm-linux-gnueabihf/tls/v7l/neon/vfp/libm.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory) ... open("/lib/libm.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\320;dH4\0\0\0"..., 512) = 512 lseek(3, 399368, SEEK_SET) = 399368 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1280) = 1280 lseek(3, 397488, SEEK_SET) = 397488 read(3, "A6\0\0\0aeabi\0\1,\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 55) = 55 fstat64(3, ) = 0 mmap2(0x48640000, 430264, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x48640000 mprotect(0x486a1000, 28672, PROT_NONE) = 0 mmap2(0x486a8000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x60) = 0x486a8000 close(3) = 0 access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory) open("/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\335\4SH4\0\0\0"..., 512) = 512 lseek(3, 887460, SEEK_SET) = 887460 read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1480) = 1480 lseek(3, 885236, SEEK_SET) = 885236 read(3, "A4\0\0\0aeabi\0\1*\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 53) = 53 fstat64(3, ) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f54000 mmap2(0x48518000, 928112, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x48518000 mprotect(0x485ed000, 32768, PROT_NONE) = 0 mmap2(0x485f5000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xd5) = 0x485f5000 mmap2(0x485f9000, 6512, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x485f9000 close(3) = 0 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f53000 set_tls(0xb6f534c0, 0xb6f53b98, 0x4847f048, 0xb6f534c0, 0xb6f54500) = 0 mprotect(0x485f5000, 8192, PROT_READ) = 0 mprotect(0x486a8000, 4096, PROT_READ) = 0 mprotect(0x4847e000, 4096, PROT_READ) = 0 munmap(0xb6f55000, 14548) = 0 getuid32() = 0 getpid() = 4931 kill(2110, SIGTERM) = 0 exit_group(0) = ? +++ exited with 0 +++ 
1
Es ist kein gewöhnliches Problem, "kill 15" ("SIGTERM") sollte funktionieren. Kannst du uns zeigen, dass "strace kill ..." ausgegeben wird? Arkadiusz Drabczyk vor 7 Jahren 0
Ich habe mir den Quellcode angesehen und nichts deutet darauf hin, dass "kill -9" nicht funktioniert. Kommt es auf der "busybox" auf Lager? Arkadiusz Drabczyk vor 7 Jahren 0
`kill -9` funktioniert, aber ich nahm an, dass es der richtige Weg ist, SIGTERM anstelle von SIGKILL zu verwenden. Also werde ich SIGKILL verwenden. Th. Thielemann vor 7 Jahren 0
Du hast recht, `SIGTERM` sollte funktionieren. Da ist etwas nicht in Ordnung. Lassen Sie mich noch einmal fragen: Ist es eine Upstream-Version "busybox"? Hast du es selbst kompiliert? Wenn nein, woher hast du es? Ich habe es lokal probiert und "kill" getötet, ohne dass ein Argument udhcpc getötet wird. Noch eine Frage - Hat udhcpc jedes Mal die gleiche PID? Es kann automatisch von "init" oder etwas anderem erzeugt werden. Arkadiusz Drabczyk vor 7 Jahren 0
Ich habe es selbst zusammengestellt. Und manchmal funktioniert es, um es mit SIGTERM zu töten, manchmal aber nicht. Die PID ist immer gleich - ein Prozess, der nicht mehr läuft. Th. Thielemann vor 6 Jahren 0

0 Antworten auf die Frage