Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (GNU/Linux, *NIX, *BSD und Co) » Probleme mit system() aufrufen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
07.07.2010, 17:03 Uhr
0xdeadbeef
Gott
(Operator)


Gern geschehen. Und achte darauf, dass du keine Zombie-Prozesse erzeugst!
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
07.07.2010, 17:12 Uhr
Lobermann



Eine Frage hab ich noch.
Was passiert, wenn das Vaterprogramm aus welchem Grund auch immer neu startet?
Kann ich mit der PID, die ich ja in ner Datei abspeicher, den Prozess dann mit neu gestartetem Vater auch killen? Oder beendet sich das Kind von selbst?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
07.07.2010, 17:47 Uhr
0xdeadbeef
Gott
(Operator)


Dann verwaisen die Prozesse und werden an init (pid 1) überwiesen. Sie laufen so lange weiter, wie sie halt dazu Lust haben (oder abgeschossen werden).

Ansonsten gelten für das Abschießen von Prozessen die Einschränkungen von kill(2), d.h., der Prozess braucht CAP_KILL oder muss die gleiche effektive UID wie der Zielprozess haben. (Praktisch: Wenn du sie von der Shell abschießen kannst, kann das auch ein von dir gestartetes Programm)
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
08.07.2010, 09:23 Uhr
Lobermann



Das Programm schließt sich leider immer noch.
Zur Info, wenn ich das gleiche Kommando in der Shell eingebe funktioniert es wunderbar.

Hier der Code:


C++:
          pid = fork();

          if(pid == -1)
          {
              CLog::Log(LOGERROR, "Unable to fork() a new Prozess for Plugin");
          }
          else if(pid == 0)
          {
              freopen("dev/null",        "r", stdin);
              freopen("/root/smlog.log", "a", stdout);

              execlp("smplugin", "smplugin",
                      "-i", "udp://224.1.2.55:30550",
                      "
-o", "udp://127.0.0.1:1234",
                      "-l", "4",
                      NULL);
          }



Es startet wieder nur kurz und beendet sich dann, bei jedem Aufruf, an unterschiedlichen Stellen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
08.07.2010, 11:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,
du solltest besser /dev/zero für stdin nutzen, weil von /dev/null darf man nicht lesen, von /dev/zero schon. evtl läuft daher dein programm nicht?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
08.07.2010, 17:02 Uhr
Lobermann



Nein, daran liegts leider auch nicht. Weis langsam echt nicht weiter....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
08.07.2010, 22:53 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


und wenn du mal eine andere anwendung ausprobierst? also einfach mal testweise? evtl liegts ja an dem programm das du versuchst aufzurufen (falscher arbeitspfad, benutzer, etc?)

bzw wenn du das ding mit komplettem pfad startest? evtl findet ers so nicht?
--
class God : public ChuckNorris { };

Dieser Post wurde am 08.07.2010 um 22:55 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
12.07.2010, 16:12 Uhr
Lobermann



Sry für meine späte Rückmeldung.

Also wenn ich zb. ein einfaches Programm das in ner Schleife Zahlen in eine Datei schreibt, aufrufe, bleibt dies auch aufgerufen und läuft brav im Hintergrund weiter.

Bin nun bereits in Kontakt mit den Entwicklern der Software, um da Infos zu erhalten.
Es sind einige vorkompilierte Bibliotheken dabei. Können die der Grund dafür sein?
Aber warum geht es dann in der Konsole einwandfrei?
Fehlen dem Plugin vielleicht Umgebungsvariablen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
04.08.2010, 13:45 Uhr
Lobermann



Hallo, ich bins wieder.

Habe nun von den Entwicklern neue Bibliotheken bekommen und nun bleibt das Programm gestartet nach dem aufruf.
Einziges Problem jetzt, es werden etwa 50 Prozesse mit diesem Programm gestartet, nur kann ich keinen Fehler finden.

Hier mal der Code Ausschnitt:


C++:
          pid_t pid;
          std::fstream pidfile;

          pidfile.open("/opt/share/omc/sm/pid.file", std::ios_base::in);
          pid_t oldpid;
          if (!pidfile)
          {
              CLog::Log(LOGERROR, "No PID File exists");
          }
          else
          {
              pidfile >> oldpid;
              kill(oldpid, SIGKILL);
          }
          pid = fork();

          if(pid == -1)
          {
              CLog::Log(LOGERROR, "Unable to fork() a new Prozess for Plugin");
          }
          else if(pid == 0)
          {
              freopen("dev/zero",        "r", stdin);
              freopen("/root/smlog.log", "a", stdout);

              execlp("smplugin", "smplugin",
                        "-i", "udp://224.1.2.51:30510",
                        "
-o", "udp://224.100.1.1:30010",
                        "-l", "4",
                        NULL);//
          }



Aufgrund der Logs weis ich, dass der Code nur 1x aufgerufen wird. Trotzdem entstehen jede menge Prozesse.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (GNU/Linux, *NIX, *BSD und Co) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: