<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Prozesse beenden]]></title><description><![CDATA[<p>Hallo!</p>
<p>Vielleicht könnt ihr mir bei folgendem Problem helfen. Und zwar gehts um die ELSE IF ... Verzweigung. Wie kann ich das testen? Wenn ich den Prozess kille, dann wird ja so zusagen ein Signal mit einer bestimmten Nummer an den Kind-Prozess gesendet. Nur leider schießt sich der Programm dann ganz ab, ohne die ELSE IF ... Verzweigung abzuarbeiten. Kennt einer von euch ne Lösung für dieses Problem??</p>
<p>Danke<br />
Tom</p>
<pre><code class="language-cpp">// Datei: forkdemo.c
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;unistd.h&gt; 
#include &lt;sys/types.h&gt;
#include &lt;sys/wait.h&gt;
#include &lt;iostream&gt;
using namespace std;

// globale Variablen 
int i = 10;
int status;

int main ()
{
  // lokale Variablen 
  pid_t pid;

  cout &lt;&lt;&quot;Beispiel zum Aufruf von fork()&quot; &lt;&lt;endl;

  // einen neuen Prozess erzeugen 
  pid = fork ();
  cout &lt;&lt;&quot;\nKind-PID= &quot; &lt;&lt;getpid() &lt;&lt;&quot;  Eltern-PID= &quot; &lt;&lt;getppid();

  // Fallunterscheidung
  cout &lt;&lt;&quot;\n&quot;;

  switch (pid)
  {
      	// Fehlerfall 
    	case -1:
      		fprintf (stderr, &quot;Fehler beim Aufruf von fork().\n&quot;);
      		exit(0);

      	// Kindprozess
    	case 0:
      		 cout &lt;&lt;&quot;Child-Prozess für 5 Sekunden schlafen gelegt.&quot; &lt;&lt;endl;
		 sleep (5);
		 //cout &lt;&lt;&quot;\nChild-Prozess beendet.&quot;;
		 exit(1);

      	// Vaterprozess bzw. pid  &gt; 0
    	default:
      			cout &lt;&lt;&quot;Parent-Prozess für 15 Sekunden schalfen gelegt&quot; &lt;&lt;endl;
			sleep (15);
			pid=wait(&amp;status);
			if(WIFEXITED(status)) 
      			  {	cout &lt;&lt;&quot;\nChild normal beendet...\n&quot;;
      				cout &lt;&lt;&quot;Exit-Code: &quot; &lt;&lt;WEXITSTATUS(status) &lt;&lt;endl; 
			  }
    			 else if (WIFSIGNALED(status))
			  {	cout &lt;&lt;&quot;Child beendet über ein Signal...\n&quot;;
      				cout &lt;&lt;&quot;Signalnummer die die Beendigung verursacht hat: &quot; &lt;&lt;WTERMSIG(status) &lt;&lt;endl;	
			  }
			 exit(2);	  		
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/126912/prozesse-beenden</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 22:13:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/126912.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 Nov 2005 20:11:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Prozesse beenden on Sat, 19 Nov 2005 20:11:21 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Vielleicht könnt ihr mir bei folgendem Problem helfen. Und zwar gehts um die ELSE IF ... Verzweigung. Wie kann ich das testen? Wenn ich den Prozess kille, dann wird ja so zusagen ein Signal mit einer bestimmten Nummer an den Kind-Prozess gesendet. Nur leider schießt sich der Programm dann ganz ab, ohne die ELSE IF ... Verzweigung abzuarbeiten. Kennt einer von euch ne Lösung für dieses Problem??</p>
<p>Danke<br />
Tom</p>
<pre><code class="language-cpp">// Datei: forkdemo.c
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;unistd.h&gt; 
#include &lt;sys/types.h&gt;
#include &lt;sys/wait.h&gt;
#include &lt;iostream&gt;
using namespace std;

// globale Variablen 
int i = 10;
int status;

int main ()
{
  // lokale Variablen 
  pid_t pid;

  cout &lt;&lt;&quot;Beispiel zum Aufruf von fork()&quot; &lt;&lt;endl;

  // einen neuen Prozess erzeugen 
  pid = fork ();
  cout &lt;&lt;&quot;\nKind-PID= &quot; &lt;&lt;getpid() &lt;&lt;&quot;  Eltern-PID= &quot; &lt;&lt;getppid();

  // Fallunterscheidung
  cout &lt;&lt;&quot;\n&quot;;

  switch (pid)
  {
      	// Fehlerfall 
    	case -1:
      		fprintf (stderr, &quot;Fehler beim Aufruf von fork().\n&quot;);
      		exit(0);

      	// Kindprozess
    	case 0:
      		 cout &lt;&lt;&quot;Child-Prozess für 5 Sekunden schlafen gelegt.&quot; &lt;&lt;endl;
		 sleep (5);
		 //cout &lt;&lt;&quot;\nChild-Prozess beendet.&quot;;
		 exit(1);

      	// Vaterprozess bzw. pid  &gt; 0
    	default:
      			cout &lt;&lt;&quot;Parent-Prozess für 15 Sekunden schalfen gelegt&quot; &lt;&lt;endl;
			sleep (15);
			pid=wait(&amp;status);
			if(WIFEXITED(status)) 
      			  {	cout &lt;&lt;&quot;\nChild normal beendet...\n&quot;;
      				cout &lt;&lt;&quot;Exit-Code: &quot; &lt;&lt;WEXITSTATUS(status) &lt;&lt;endl; 
			  }
    			 else if (WIFSIGNALED(status))
			  {	cout &lt;&lt;&quot;Child beendet über ein Signal...\n&quot;;
      				cout &lt;&lt;&quot;Signalnummer die die Beendigung verursacht hat: &quot; &lt;&lt;WTERMSIG(status) &lt;&lt;endl;	
			  }
			 exit(2);	  		
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/921704</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/921704</guid><dc:creator><![CDATA[Tom21]]></dc:creator><pubDate>Sat, 19 Nov 2005 20:11:21 GMT</pubDate></item><item><title><![CDATA[Reply to Prozesse beenden on Sat, 19 Nov 2005 20:24:31 GMT]]></title><description><![CDATA[<p>Kommando zurück.</p>
<p>Habe rausgefunden woran es lag.</p>
<p>gruss<br />
Tom</p>
]]></description><link>https://www.c-plusplus.net/forum/post/921720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/921720</guid><dc:creator><![CDATA[Tom21]]></dc:creator><pubDate>Sat, 19 Nov 2005 20:24:31 GMT</pubDate></item></channel></rss>