Hi all,
I originally posted this question on
stackoverflow<http://stackoverflow.com/questions/6624622/what-happens-in-bash-when-you-do-ctrl-c-hint-its-not-simply-sending-a-sigint>,
but did not receive a satisfactory response. Any ideas?
--------------8<-----------------
A little background first - When I do apt-get install downloads from my
company internet it provides a high burst of speed (400-500KB/s) for the
first 10 seconds or so before dropping down to a tenth of that (40-50KB/s),
and then after a few minutes to a truly miserable (4-5KB/s). This makes me
think that the sysadmin has implemented some sort of a network throttling
scheme.
Now I know that the network is not simply erratic, because if I start
an apt-get
install foo, Ctrl-C it after 10 seconds and immediately run apt-get install
foo again (by doing an up arrow and enter to use bash history), and then *keep
repeating this process for a few minutes till all packages are downloaded*,
I can download even large packages very fast. In particular, even after
aborting a download with Ctrl-C, apt-get seems to be able to resume the
download in the next invocation.
Of course, staring at the screen doing Ctrl-C Up Enter every 10 seconds gets
really boring real fast, so I wrote a shell script -
#!/bin/sh
for i in `seq 1 100` ; do
sudo apt-get install foo -y &
sleep 10
sudo kill -2 $!
done
This seems to work. It spawns apt-get, runs it for 10 seconds and then
kills (by sending a SIGINT) it and starts it up again. However, it doesn't
really work because now apt-get does not resume downloads on subsequent
invocations!
An an experiment I ran sudo apt-get install foo from one terminal and then
ran kill -2 <PID of apt-get> from another terminal. And even in that case,
when I restart apt-get, it does not resume the download.
So clearly a Ctrl-C is *not* equivalent to SIGINT. And something else is
happening when I do Ctrl-C manually which gives apt-get a chance to save the
state of the download. The question is - what is it?
These are the suggestions I have received so far, but no cigars. The mystery
deepens! -
1.
On sudo kill -2 $! the signal might be going to sudo instead of apt-get.
This is not the reason because as mentioned above I also tried sending
SIGINT specifically to apt-get's PID and even that prevented apt-get from
saving its state.
2.
Sudo catches the signal and sends some other signal to apt-get. I tried
sending apt-get all the signals I can think of! It still does not resume the
download for any of them. It only resumes downloads when I do Ctrl-C to kill
it.
3.
Apt-get handles SIGINT differently if it is from a script instead of an
interactive shell. Again, the "experiment" above proves that this is not
true.
------------------>8-----------------
Thanks,
Anupam Jain
_______________________________________________
Ilugd mailing list
[email protected]
http://frodo.hserus.net/mailman/listinfo/ilugd