Auf Terminierung von gestartetem Nautilus warten - fork, execlp



  • Ich möchte nach dem Start von Nautilus auf dessen Beendigung warten. Leider wird die Blockierung von waitpid nach dem Start von Nautilus aufgehoben. Was kann ich machen um auf die Beendigung von Nautilus zu blocken?

    Danke im Voraus.

    Georg

    #include <iostream>
    #include <stdlib.h>
    #include <sys/wait.h>
    #include <sys/types.h>
    using namespace std;
    
    static void startTimePanel ();
    static void child_status(int status);
    
    int main() {
    
    	startTimePanel ();
    	cout << "Mainthread continues" << endl;
    	return 0;
    }
    
    static void startTimePanel ()
    {
    	pid_t pid;
    	int status;
    	switch(pid = fork())
    	{
    		case -1:
    			cout <<"Error fork()"<< endl;
    			break;
    		case 0:
    			//GM: Childprocess
    			//GM: start "nautilus"
    			cout <<"Childprocess"<< endl;
    			execlp ("nautilus", "nautilus", "" , NULL);
    			break;
    		default:
    			//GM: Parentprocess
    			//GM: wait for the child to end, then update all screens
    			int ret = waitpid(pid, &status, WUNTRACED);
    			if(ret != pid)
    			//if(wait(&status) != pid)
    				cout <<"Error wait for child"<< endl;
    			else
    			{
    				cout <<"Parentprocess continues"<< endl;
    				child_status(status);
    			}
    
    	}
    }
    
    static void child_status(int status)
    {
    	if(WIFEXITED(status))
    	{
    		printf("Child normal termination %d\n", WEXITSTATUS(status));
    	}else if (WIFSIGNALED(status))
    	{
    		printf("Child terminated by signalnummer %d.\n", WTERMSIG(status));
    	}else if(WIFSTOPPED(status))
    	{
    		printf("Child was stopped by signalnummer %d.\n", WSTOPSIG(status));
    	}
    }
    


  • schliz schrieb:

    Ich möchte nach dem Start von Nautilus auf dessen Beendigung warten. Leider wird die Blockierung von waitpid nach dem Start von Nautilus aufgehoben.

    Ich weiß leider nicht, was du dagegen machen kannst, aber ich kann dir den Grund nennen: nautilus achtet darauf, dass er pro User (oder pro X11-Session oder ähnliches) nur einmal gestartet ist. Ein nautilus-Prozess existiert normalerweise automatisch, wenn du Gnome benutzt. Beobachte mal deine Prozessliste, wenn du nautilus ein zweites Mal startest: Der neue nautilus-Prozess wird sich sofort beenden und stattdessen den alten nutzen.

    Es gibt also keinen Prozess, auf den du warten könntest. Du müsstest vielleicht gezielt auf ein bestimmtes Fenster warten.



  • Danke für Deine Antwort, das könnte der Grund sein.

    Noch einen schönen Tag.

    Georg


Anmelden zum Antworten