Herausfinden ob Prozess läuft

M

mvarlik

Mitglied
Thread Starter
Dabei seit
27.06.2005
Beiträge
51
Reaktionspunkte
0
Hallo,

ich möchte auch einem Cocoa Programm heraus testen, ob ein bestimmter Prozess (ich kenne nur den Namen, nicht die PID) läuft. Ich habe dazu versucht, mit einer Pipe nach "ps x" in dessen Ausgabe nach dem Prozessnamen zu suchen (siehe Codefragment unten). Leider zeigt der besagte Code ein merkwürdiges Verhalten: wird er "ganz normal" mit dem gcc übersetzt funktioniert alles prima, füge ich den Code jedoch in ein Cocoa Projekt ein, dann werden immer nur 80 Zeichen von jeder Zeile des ps -Befehls gelesen. Kann sich/mir das jemand erklären? Gibt es vielleicht sogar eine bessere Möglichkeit um nach dem Vorhandensein eines Prozesses zu testen?

MfG
Michael

*******Der Code*******
bool isRunning() {
FILE *ps, *outf;
char buff[256];

if((ps=popen("/bin/ps x", "r")) == NULL) {
printf("Error\n");
pclose(ps);
return NO;
}
else
{
while(fgets(buff, 256, ps))
{
if(strstr(buff, "PROZESSNAME") != NULL)
{
pclose(ps);
return YES;
}

}
pclose(ps);
return NO;
}
}
 
mvarlik schrieb:
dann werden immer nur 80 Zeichen von jeder Zeile des ps -Befehls gelesen. Kann sich/mir das jemand erklären?
ps versucht anscheinend herauszufinden wie groß das Terminalfenster ist auf dem es ausgibt. Und mit popen() gibt es gar keines, so dass es die Standardgröße 80 annimmt. Wie man das ändert: ?
Evtl. mit setenv("COLUMNS=240");

-- hns
 
Der sysctl Ansatz ist der bessere. Das Funktioniert aber nur mit einem weitern Schritt für CFM Applicationen. Tip: top source code lesen, ist nicht schwer.

Gruss

Alex
 
nutz evtl. mal die Option "w" beim ps...
also "ps awwwww" um nix abschneidenzulassen, da es ja wie oben beschrieben eigentlich eine 0er-Shell annimmt und ps dann "abschneidet"
 
Hallo,

danke für eure Hinweise. Die ps Option "w" funktioniert, aber die sysctl Variante scheint mir dennoch die bessere Wahl zu sein.

MfG
Michael
 
Zurück
Oben Unten