prozess mittels kill abschiessen geht in die hose



  • moin,

    ein stueck source hier sieht so aus

    if ( (child_pid = fork() ) == 0) {
    			while( (ret = recv(connectfd, answer, sizeof(answer), 0)) != 0 ) 
    				if ( ret == -1 ) {
    					send_error_msg(rimc_c, "Error while recv answer from rims");
                          	 	 	close(rimc_c);
                           		 	close(connectfd);
    					exit(0);
    				}else {
    					printf("%s\n", answer);
    					ret = send(rimc_c, answer, sizeof(answer), MSG_NOSIGNAL);
    					if (ret == -1) {  //rimc has closed his deskriptor
    						close(rimc_c);
    						close(connectfd);
    						exit(0);
    					}
    				}
    			shutdown(rimc_c, 1);
    		}
    
    		while( ( cvf = fopen( CVF_PATH, "r" ) ) != NULL ) {
    			fclose(cvf);
    			sleep(1);
    		}
    
    		if ( ( ret = kill(child_pid, SIGKILL) ) == 0 )
    			shutdown(rimc_c, 1);
    

    in sehr unregelmaessigen abstaenden, manchmal ja, manchmal nein, wird wohl nicht nur das child abgeschossen, sondern auch der parent. auf der konsole steht nur ein "Killed" und das programm is weg. wenn ich SIGKILL durch SIGINT ersetze ist der selbe effekt, nur das kein "Killed" auf der konsole erscheint.

    manchma kann ich das prog 10 ma laufen lassen, erst beim 11. mal passierts, manchma schon beim 1. mal; es ist also keine regel da

    weiss jemand was zum fuck da losist ­čśĽ



  • Ersetze mal ret = kill(child_pid, SIGKILL) durch printf("%i",child_pid). Ich denke das kill u.U. auch vom Parent ausgef├╝hrt wird was einen kill(0, SIGKILL) durchf├╝rt, der dann nat├╝rlich alle Prozesse der Gruppe abschiesst.

    Kann nat├╝rlich aus sein, dass ich eine Klammer ├╝bersehen habe.


Log in to reply