Utility to kill a program after n seconds

Άγγελος Οικονομόπουλος aoiko at cc.ece.ntua.gr
Sun Sep 1 17:01:02 EEST 2002


On Sunday 01 September 2002 13:16, Nikos Kanellopoulos wrote:
> Μετά από παρακίνηση του Κώστα του Μαϊστρέλη, έγραψα ένα προγραμματάκι
> που τρέχει ένα πρόγραμμα και το σκοτώνει (πρώτα SIGTERM και αν δεν
> πιάσει,
 SIGKILL) μετά από το χρόνο που καθορίζει ο χρήστης.
> 
> π.χ. 
> $ timek 20 top -p 1 -p 5 -p 23
> θα τρέξει το top για 20 δευτερόλεπτα. 
> 
> Βρίσκεται εδώ:
> http://www.himaira.net/utils/timek.c

mhpws etsi 8a htan pio aplo?

--- timek-1.c	Sun Sep  1 16:56:41 2002
+++ timek.c	Sun Sep  1 16:56:41 2002
@@ -15,9 +15,7 @@
 #include <signal.h>

 int main (int argc, char* argv[]) {
-	int i;
 	int secs_to_sleep;
-	char* param[30];
 	pid_t pid;

 	if (argc < 3) {
@@ -25,13 +23,7 @@
 		exit(1);
 	}
 
-	if (argc > 1)
-		secs_to_sleep = atoi(argv[1]);
-
-	for (i=0; i<argc; i++)
-		param[i] = argv[i+2];
-
-	param[++i] = 0;
+	secs_to_sleep = atol(argv[1]);

 	pid = fork();

@@ -39,15 +31,14 @@
 		perror("\nFork failed! Exiting.\n");
 		exit(1);
 	} else if (pid == 0) {  	/* child process */
-		//printf("\nInside child, pid=%i\n", pid);
-		execvp ( argv[2], param);
+		if(execvp ( argv[2], argv+3)==-1){
+			fprintf(stderr, "exec error, aborting\n");
+		}
 	} else {			/* parent process */
-		//printf("\nInside parent, pid=%i\n", pid);
 		sleep(secs_to_sleep);
 		if (kill (pid, SIGTERM) == -1)
 			kill (pid, SIGKILL);
 		sleep(2); system("reset");	/* reset terminal */
 		exit(0);
 	}
-
 }

btw, kalutera 8a htan na mhn kaneis reset, alla save & restore.
-- 
Choose a data representation that makes the program simple.
            - The Elements of Programming Style (Kernighan & Plaugher)




More information about the Linux-greek-users mailing list