Wie zum senden eines SIGINT, um von Python aus ein bash-script?

Ich soll zum starten einer hintergrund-Python-job von einem bash-Skript und dann elegant töten es mit SIGINT. Dies funktioniert von der shell, aber ich kann nicht scheinen, um es an die Arbeit in einem Skript.

loop.py:

#! /usr/bin/env python
if __name__ == "__main__":
    try:
        print 'starting loop'
        while True:
            pass
    except KeyboardInterrupt:
        print 'quitting loop'

Aus der shell kann ich es unterbrechen:

$ python loop.py &
[1] 15420
starting loop
$ kill -SIGINT 15420
quitting loop
[1]+  Done                    python loop.py

kill.sh:

#! /bin/bash
python loop.py &
PID=$!
echo "sending SIGINT to process $PID"
kill -SIGINT $PID

Aber aus einem Skript kann ich nicht:

$ ./kill.sh 
starting loop
sending SIGINT to process 15452
$ ps ax | grep loop.py | grep -v grep
15452 pts/3    R      0:08 python loop.py

Und, wenn es gestartet wurde aus einem Skript kann ich nicht mehr töten, es aus der shell:

$ kill -SIGINT 15452
$ ps ax | grep loop.py | grep -v grep
15452 pts/3    R      0:34 python loop.py

Ich bin angenommen, ich bin fehlen einige feine Punkt der bash-job-control.

InformationsquelleAutor Ryan | 2009-06-10

Schreibe einen Kommentar