In Bezug auf Linux-API können wir verwenden exec*
Funktionen oder system
startet eine Shell, die dann einen Befehl ausführen soll.
Ist es möglich, dass ein Prozess anfordert? ein bereits laufender Shell-Prozess (z.B. ein Bash-Prozess), um einen Befehl auszuführen und erhält dann die Standardausgabe des Befehls? Zum Beispiel sind Befehle, die ich in einem laufenden Shell-Prozess ausführen möchte, diejenigen, die Shell-spezifische Zustandsinformationen erzeugen, z. dirs
und jobs
.
Kann das oben in C getan werden, und in Bash mit einigen Dienstprogrammen (siehe Hier und Hier)
Zum Beispiel möchte ich ein C-Programm oder Shell-Skript haben, das die Ausgabe von running bekommen kann dirs
und jobs
in einem vorhandenen Shell-Prozess.
Vielen Dank.
Antworten:
2 für die Antwort № 1Wenn Sie Folgendes während des Shell-Starts auswerten:
dump_shell_data() {
mkdir -p -- "$HOME/.shell-state" || return
jobs >"$HOME/.shell-state/$$.jobs" 2>&1
dirs >"$HOME/.shell-state/$$.dirs" 2>&1
}
trap dump_shell_data SIGUSR1
... dann send a SIGUSR1
Shells, die den obigen Code ausgeführt haben, weisen diese Shells an, zu springen jobs
und dirs
Ausgabe in Dateien, die nach der PID benannt sind.
Beachten Sie, dass es erhebliche Vorbehalte gibt. Der Benutzer einer Shell kann ein Skript eines Drittanbieters ausführendas definiert diese Falle neu; und eine Shell, die das Warten auf einen Befehl zum Beenden blockiert, führt den Trap erst aus, nachdem dieser Befehl tatsächlich abgeschlossen wurde.