Re: lug-bg: Задачка Закачка: Bash
- Subject: Re: lug-bg: Задачка Закачка: Bash
- From: Aleksandar Valchev <hippo@xxxxxxxxxxxxxxxxxx>
- Date: Tue, 30 Nov 2004 12:06:54 +0200
- Organization: Efficient Software Systems
Да, exec-а преебава простотията. Вместо exec сложих system(). Със system() май
върви по-добре, накара ме да си рестартирам PC-то (като се има на предвид, че
няма никакви limits). Мисля си, че е по-добре да се ловят сигналите SIGKILL,
SIGSTOP (да не може да се спре изпулнението, чрез kill), но чрез системното
извикване signal(), не става. В ман page на signal() пише, че може да
игнорираш или да хванеш всички сигнал изключение на SIGKILL и SIGSTOP, като
същото се отнася и за sigaction (евала на Linux :) ).
Не мисля, че трябва нещо да пишеш в buffer-a за да зеeма памет. Би трябвало
malloc() да заделя памет и тя си остава заделена, без значение дали си
записал нещо в нея или не :). Якото е, че не се освобождава :).
Ако някой пробва тази прогама, нека да сподели резултата, защото ми е
интересно.
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
void duplicate(char *prog)
{
pid_t p;
char *cmd;
char *buffer;
p = fork();
cmd = (char *) malloc(strlen(prog) + 3); // това не се освобождава
strcpy(cmd, prog); strcat(cmd, " &");
// Това си пълни памета.
// buffer = (char *) malloc(1024);
if (0 == p)
{
//execl(cmd, NULL);
system(cmd);
}
else
{
duplicate(prog);
}
}
int main(int argc, char *argv[])
{
duplicate(argv[0]);
return 0;
}
============================================================================
A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html
============================================================================
|