exec in Perl startet extra Shell

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Warlord
Beiträge: 128
Registriert: 10.03.2005 12:18:18
Wohnort: Norddeutschland

exec in Perl startet extra Shell

Beitrag von Warlord » 12.03.2005 11:56:56

Moin Moin!!!

Dies ist mein erstes Posting hier, und ich möchte erstmal Hallo sagen!


Doch nun meine Frage:

Wenn ich aus einem Perl-Skript mit dem Befehl exec das DVB-Kommando szap aufrufe:

Code: Alles auswählen

exec "szap -r SAT.1";
erhalte ich wie erwartet den Prozeß

Code: Alles auswählen

 6849 pts/1    S+     0:00 szap -r SAT.1
Wenn ich jedoch die Ausgabe umleite mittels

Code: Alles auswählen

exec "szap -r SAT.1 >/dev/null";
so erhalte ich zwei Prozesse:

Code: Alles auswählen

 6930 pts/1    S+     0:00 sh -c szap -r SAT.1 >/dev/null
 6931 pts/1    S+     0:00 szap -r SAT.1
Warum wird die extra Shell mit der Option -c gestartet?

so, das war's... hoffe die Formatierung haut hin... :roll:

laut Vorschau sieht's gut aus... 8)

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 12.03.2005 15:09:55

Erstmal willkommen im Forum!

Wenn Perl spezielle Metacharacter wie z.B. ">" findet, übergibt Perl das ganze Kommando an "sh -c" und erspart sich somit das unter Umständen komplizierte Parsen.

Diese Folgeerscheinung von zwei Prozessen, kannst du natürlich so wieder verhindern:

Code: Alles auswählen

exec "exec szap -r SAT.1 >/dev/null";

Benutzeravatar
Warlord
Beiträge: 128
Registriert: 10.03.2005 12:18:18
Wohnort: Norddeutschland

Beitrag von Warlord » 13.03.2005 11:26:45

Jo! Danke für den Tip mit dem Doppel-exec...

Wäre ja doch ein wenig gewagt, aus nem Skript einfach die übernächste PID zu killen, nur weil 'sh' und 'szap' meistens nacheinander ausgeführt werden... :)

Und wenn ich forke, bekomme ich nun mal die PID von 'sh' und mein Workaround mit

Code: Alles auswählen

$pid++;
ist wirklich nicht besonders...naja, wie soll ich sagen...sicher

Antworten