Ich bin mir nicht sicher, ob dies die einzigen Gründe sind, aber hier ist meine Vorgehensweise:
Abhängig davon, wie Sie ein Shellscript schreiben, um den gewünschten Prozess zu beenden, könnten Sie am Ende die Kill-PID beenden, bevor sie Ihr Ziel beendet, nehmen wir mydaemon zum Beispiel:
kill -9 `ps ax | grep mydaemon | awk '{ print $1 }'`
A) SIGPIPE-ing killIn einer 32-Bit-Linux-PID ist normalerweise eine 15-Bit-Ganzzahl, Überläufe passieren oft, es besteht eine ziemlich große Chance, dass die grep- oder awk-PIDs vor der von mydaemon erscheinen . In 64-Bit sind PID-Zahlen normalerweise 22-Bit, es ist mehr als 100x weniger wahrscheinlich, aber immer noch ziemlich faktisch.
Wenn Sie eine Ihrer Pfeifen töten, erhalten Sie ein SIGPIPE und normalerweise bedeutet dies auch den Tod, also töten würde getötet werden, bevor mydaemon getötet wird wodurch der Tötungsversuch fehlschlägt.
B) Andere PIDs töten Nehmen wir auch an, Sie hätten vi /etc/mydaemon/mydaemon.conf vollständig läuft, könnte diese PID ebenfalls beendet werden, ganz zu schweigen von den Prozessen anderer Benutzer, da Sie höchstwahrscheinlich einen solchen Befehl als root ausführen würden.
C) Es ist eine einfache Unix-ähnliche Sperre -> Kein zusätzlicher Code/Daemon erforderlich. PidFiles stellen eine ziemlich einfache Möglichkeit dar, benutzerverwaltbare Sperren zu erstellen, um Sie davon abzuhalten, einen Daemon versehentlich zweimal zu spawnen.
Die PID-Dateien enthalten die Prozess-ID (eine Zahl) eines bestimmten Programms. Beispielsweise kann Apache HTTPD seine Hauptprozessnummer in eine PID-Datei schreiben - was eine normale Textdatei ist, mehr nicht - und später die darin enthaltenen Informationen verwenden, um sich selbst zu stoppen. Sie können diese Informationen auch verwenden, um den Prozess selbst zu beenden, indem Sie cat filename.pid | xargs kill
verwenden