/ / Kann ein Prozess einen laufenden Shell-Prozess anfordern, um einen Befehl auszuführen und erhält die Standardausgabe des Befehls? - c, Linux, Bash, Shell

Kann ein Prozess einen laufenden Shell-Prozess anfordern, um einen Befehl auszuführen, und erhält er die Standardausgabe des Befehls? - c, Linux, Bash, Shell

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 № 1

Wenn 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.