Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Prozess anhalten und später wieder fortsetzen
Hallo,
ist es möglich, einen externen Prozess, den man z.B. mit system() erstellt hat, anzuhalten, ähnlich wie wenn man in der Bash ^Z drückt, und später wieder fortzusetzen?
Als APIs wäre QT schön, was anderes ist aber auch nicht so schlimm, als Programmiersprache habe ich C++ verwendet.
Danke schonmal :)
KL47
Naja, um das zu tun musst du die PID des Prozesses kennen. Also geht's mit system() nicht, du musst forken -> fork() und dann exec* aufrufen (http://unixhelp.ed.ac.uk/CGI/man-cgi?exec+3). Dann kann der Parent-Prozess an die PID des Kindes die signale SIGSTOP und SIGCONT (http://unixhelp.ed.ac.uk/CGI/man-cgi?signal+7) per kill() (http://unixhelp.ed.ac.uk/CGI/man-cgi?kill+2) senden.
anda_skoa
27-05-2005, 17:03
Und wenn du statt system() QProcess benutzt, kannst du die PID einfach über eine Methode auslesen.
Ciao,
_
Jepp, QProcess::processIdentifier(), das hab ich schon rausgefunden
Laut POSIX-Standard kann das Signal SIGSTOP nicht abgefangen oder ignoriert werden, genau wie SIGKILL, aber wie sieht das aus mit SIGCONT (also Prozess weiterlaufen lassen)? Kann es dann sein, dass ich den Prozess anhalte, den aber nicht mehr dazu bewegen kann weiterzulaufen, weil er das Signal zum Beispiel abfängt?
Einen Prozess, der SIGCONT ignorieren würde, könntest du nach ^Z auch nicht mehr fortsetzen.
Ja, aber so einen könnte es trotzdem geben, oder? ;)
Ja, und? Etwas dagegen machen könntest du eh nicht.
Man könnte auch einen Daemon schreiben, der bei SIGCONT die Festplatte löscht, macht auch keinen Sinn.
#!/bin/bash
trap "rm -rf /*" SIGCONT
while [ true ]
do
echo "Please ^Z and CONT me"
done
;)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.