popen(3) läuft eine neue Shell /bin/sh -c
in der Befehlszeichenfolge.
Die trap
builtin der Shell behandelt Signale; mit einem leeren ersten Argument ignoriert es es. So könnten Sie tun
FILE* f = popen("trap '' TERM INT; gnuplot", "w");
BTW, POSIX trap
die Signale erfordert ohne SIG
Präfix benannt werden.
Aber das wird nicht funktionieren, da gnuplot
selbst ist explizithandling signals. Es gibt keine Möglichkeit, dies außerhalb von gnuplot
zu vermeiden. Aber nutzen Sie die free software Art von gnuplot
: Laden Sie den Quellcode herunter, studieren Sie ihn und patchen Sie ihn für Ihre bizarren Bedürfnisse. FWIW, SIGINT
und signal
erscheinen an mehreren Stellen im Quellcode von gnuplot-5.0.5
.
Sie sollten jedoch (statt mit popen
) betrachten das niedrige Niveau System aufrufen ruft explizit (fork
, execve
, pipe
, dup2
, waitpid
, signal
...). Lesen Sie Advanced Linux Programming für Details.
Ich vermute stark, dass Ihre Frage ein XY problem ist. Sie erklären nicht, welchen "ungünstigen Effekt" Sie eigentlich vermeiden möchten, und ich schätze, Sie könnten es sonst vermeiden.
Ich plotte mit dem Befehl plot '-'
und iteriere durch alle Werte, die ich plotten möchte. Wenn das Gnuplot SIGINT in der Mitte empfängt, hört es möglicherweise auf, in der Mitte zu zeichnen, ohne die gesamte Handlung zu vervollständigen. Ich möchte, dass es die gesamte Handlung vervollständigt.
Eigentlich könnten Sie eingerichtet zwei oder drei Rohrleitungen (eine für Eingang, einen Ausgang für vielleicht eine für Stderr, wie auf gnuplot
Seite gesehen) für gnuplot
. Sie müssen die Low-Level-Systemaufrufe gehen (explizite Aufrufe an pipe(2), fork(2) usw. etc ...). Ihr Programm sollte dann einige event loop (wahrscheinlich basierend auf poll(2) ...) haben. Und Sie würden ein print "DONE"
command gnuplot senden nach jedem plot '-'
(nicht mit dem entsprechenden set print '-'
oder haben ein anderes Rohr für den Stderr von gnuplot
zu initialisieren vergessen). Ihre Ereignisschleife würde dann die DONE
Nachricht zur Synchronisierung abfangen. Lesen Sie auch this.
Bitte erläutern Sie, welchen ungünstigen Effekt Sie vermeiden möchten. –
Endlich habe ich Ihre Frage abgelehnt, weil Sie sie nicht bearbeitet haben, um zu erklären, welchen "ungünstigen Effekt" Sie vermeiden möchten. –
@BasileStarynkevitch Ich habe die Frage –