From Bugzilla Helper: User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.5) Gecko/20041111 Firefox/0.6.1 StumbleUpon/1.87 Description of problem: running ifup multiple times without running ifdown on an interface setup for dhcp leaves a bunch of dhclient daemons running that ifdown does not kill. After a dozen or so of these dhclient daemons are running, the interface becomes unstable, going down and requiring an ifup <if>; ifdown <if> to fix it, presumably because of the competing dhclient daemons. Version-Release number of selected component (if applicable): How reproducible: Always Steps to Reproduce: 1. setup eth0 as a dhcp interface 2. ifup eth0 3. ifup eth0 4. ifup eth0 5. ifup eth0 6. ifdown eth0 7. ps aux | grep dhclient 8. notice the three orphaned dhclients Actual Results: Three orphaned dhclient daemons are left running Expected Results: Only one dhclient daemon should be running for a given interface at a given time Additional info:
changed summary to more accurately reflect severity of bug. This bug will cause the networking on affected machines to become mysteriously and worseningly unstable as the machine run.
Currently, dhclient does not write its pid file until after it gets the lease; ergo, if ifup is invoked a second time while dhclient is still negotiating/waiting, it's impossible to kill the other dhclients without grovelling through /proc, which isn't really practical. While it would be a change from upstream, does it make sense to have dhclient record its pid file immediately?
I agree this is bad behavior on dhclient's part. The first thing it should do is check for the existence of the pid file; if it exists, it should then exit; the next thing it should then do is create the pid file. I'll make changes accordingly for dhcp-3.0.1-40_FC3 / dhcp-3.0.2-2_FC4 .
OK, bounce back to initscripts when you're done.
This is now fixed, in dhcp-3.0.1-40_FC3, and dhcp-3.0.2-2 (FC4) .
This should be fixed with the current FC4 devel dhclient. A patch will be added in initscripts-8.08-1 that will print a more legible error message in the case where a client is already running rather than just 'failed'.
This was added to RHEL-3 and RHEL-4 because they both have this problem: repeated ifup attempts cause dhclient to be run more than once for the same interface, leading to orphaned dhclient processes and progressively worse and unstable network performance.