Moin, moin,
wenn ich per fork/exec den g++ compiler starte und dann versuche
diesen mit kill(pid,SIGKILL) zu beenden, dann laueft der cc1plus
Unterprozess von g++ noch einige Zeit munter weiter. Ist das normal?
Eigentlich sollte kill den doch auch beenden. Oder, wie komme ich
mit UNIX/C-Hilfsmitteln an die PIDs von Unterunterprozessen um
diese manuell zu beenden?
tj
Killen von Unterunterprozessen
Re: Killen von Unterunterprozessen
Hi!
Mit SIGKILL hat der Prozeß keine Chance mehr, aufzuräumen. Das Problem ist also selbstverursacht. Verwende SIGTERM oder evtl. SIGINT.
Gruß,
hjb
Mit SIGKILL hat der Prozeß keine Chance mehr, aufzuräumen. Das Problem ist also selbstverursacht. Verwende SIGTERM oder evtl. SIGINT.
Gruß,
hjb
Pro-Linux - warum durch Fenster steigen, wenn es eine Tür gibt?
Re: Killen von Unterunterprozessen
hjb, vielen Dank erstmal fuer die Anregung, hab's gleich
mal ausprobiert, das Problem bleibt aber immer noch.
Hier mal ein kleines Testprogramm 'sigtest.cpp' um das
ganze zu verdeutlichen:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <vector>
using namespace std;
int main() {
// compilation will take a long time
vector<vector<vector<vector<vector<
vector<vector<vector<vector<vector<
vector<vector<vector<vector<vector<
int
> > > > >
> > > > >
> > > > >
dummy;
int pid = fork();
if (pid == 0) {
// compile myself
char *argv[<!--no-->4<!--no-->];
argv[<!--no-->0<!--no-->] = "sh";
argv[<!--no-->1<!--no-->] = "-c";
argv[<!--no-->2<!--no-->] = "g++ -O3 sigtest.cpp -o sigtest";
argv[<!--no-->3<!--no-->] = 0;
execv("/bin/sh", argv);
exit(127);
} else {
sleep(1);
kill(pid,SIGTERM);
cout << "killed " << pid << endl;
sleep(10);
exit(0);
}
</font><hr></pre></blockquote>
Nach dem starten erscheint zwar "killed ...", aber in top
sehe ich cc1plus weiterhin laufen, auch wenn sich das
Programm durch den exit-Aufruf beendet...
Ich waere echt dankbar, wenn jemand noch ne Idee hat
woran's liegen koennte.
tj
mal ausprobiert, das Problem bleibt aber immer noch.
Hier mal ein kleines Testprogramm 'sigtest.cpp' um das
ganze zu verdeutlichen:
<blockquote><pre><font size="1" face="">code:</font><hr><font face="Courier New" size="2">
#include <iostream>
#include <unistd.h>
#include <signal.h>
#include <vector>
using namespace std;
int main() {
// compilation will take a long time
vector<vector<vector<vector<vector<
vector<vector<vector<vector<vector<
vector<vector<vector<vector<vector<
int
> > > > >
> > > > >
> > > > >
dummy;
int pid = fork();
if (pid == 0) {
// compile myself
char *argv[<!--no-->4<!--no-->];
argv[<!--no-->0<!--no-->] = "sh";
argv[<!--no-->1<!--no-->] = "-c";
argv[<!--no-->2<!--no-->] = "g++ -O3 sigtest.cpp -o sigtest";
argv[<!--no-->3<!--no-->] = 0;
execv("/bin/sh", argv);
exit(127);
} else {
sleep(1);
kill(pid,SIGTERM);
cout << "killed " << pid << endl;
sleep(10);
exit(0);
}
</font><hr></pre></blockquote>
Nach dem starten erscheint zwar "killed ...", aber in top
sehe ich cc1plus weiterhin laufen, auch wenn sich das
Programm durch den exit-Aufruf beendet...
Ich waere echt dankbar, wenn jemand noch ne Idee hat
woran's liegen koennte.
tj