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