Wie kann ich in der Linux-Umgebung ein Kill-Signal an einen Prozess senden und gleichzeitig sicherstellen, dass der von diesem Prozess zurückgegebene Exit-Code 0 ist? Müsste ich dafür etwas ausgefallene GDB-Magie machen, oder gibt es ein ausgefallenes Kill-Signal, von dem ich nichts weiß?
Testfall:
cat; echo $?
killall cat
Das Ausprobieren verschiedener Kill-Signale bietet nur unterschiedliche Rückgabesignale, z. B. 129, 137 und 143. Mein Ziel ist es, einen Prozess abzubrechen, der von einem Skript ausgeführt wird, das Skript jedoch für erfolgreich zu halten.
No symbol table is loaded. Use the "file" command
. Dies ist jedoch höchst unwahrscheinlich._exit
Systemaufruf mit0
als Argument aufruft. Das funktioniert bei jedem Prozess, der nicht nur CPU-Zyklen durchläuft und brennt. Wenn sich der Prozess nicht in einer Endlosschleife befindet, können Sie den gleichen Ansatz verwenden, wenn Sie die erforderlichen Anweisungen irgendwo in der ausführbaren Datei finden und den Anweisungszeiger dorthin zeigen.Nein. Wenn die Shell
SIGCHLD
sie bedingungslos abfängt, setzt sie den Rückgabewert entsprechend auf einen Wert ungleich Null. Dies würde daher eine Änderung des Skripts oder der Shell erfordern.quelle
Ich bin nicht sicher, aber dies wird mit einer 0 beendet, wenn eines der aufgelisteten Signale empfangen wird. Sie können auch andere Aktionen ausführen, z. B. das Aufrufen einer Funktion usw.
quelle
Dieser Einzeiler arbeitete für mich:
quelle
$ cat; echo $?
Terminated
143
.Ein bisschen verrückt, aber ..
Sie können einen Wrapper für Ihren Prozess erstellen, der den SIGCHLD-Handler überschreibt. Beispielsweise:
Danach können Sie Ihr Skript veranlassen, diesen Wrapper anstelle Ihres Prozesses auszuführen, indem Sie ihn früher in $ PATH einfügen und in denselben Namen umbenennen.
quelle