проблема с execv
От: bymer  
Дата: 05.10.09 11:27
Оценка:
Здравствуйте! У меня такая проблема:
Из одной программы я вызываю другую. Вот из которой вызываю:
#include <unistd.h>
#include <stdio.h>
int main (void) {

char *arg[] = { "/home/pasha/Документы/1", 0 };

/* fork, and exec within child process */
if (fork() == 0) {
printf("In child process:\n");
execv(arg[0], arg);
printf("I will never be called\n");
}
printf("Execution continues in parent process\n");
}
А вот которую вызываю:
#include <termios.h>
#include <sys/ioctl.h>
#include <signal.h>
#include <stdlib.h>
#include <curses.h>
#include <time.h>
#include <sys/time.h>
void alarm_handler()
{
int i;
time_t tp;
char *s;

tp = time(NULL);
s = ctime(&tp);
wprintw(stdscr,"%s",s);
refresh();

}


int main(int argc, char * argv[])
{
struct itimerval delay;
int ret;
int y;
if(argc>1)
y=(int)argv[1];
signal (SIGALRM, alarm_handler);
delay.it_value.tv_sec = 3;
delay.it_value.tv_usec = 0;
delay.it_interval.tv_sec = 1;
delay.it_interval.tv_usec = 0;
ret = setitimer (ITIMER_REAL, &delay, NULL);

initscr();
curs_set(TRUE);
while(1)
{
move(3,1);
pause();
}
endwin();
exit(EXIT_SUCCESS);
}
В этой выводится время. Как я понимаю эта должна выполниться и вернуть управлению в первую и на экране должно появиться Execution continues in parent process. А у меня получается наоборот сначала выводится эта надпись, а потом выводится таймер и терминал начинает подглючивать. Поясните пожалуйста в чем проблема.
Re: проблема с execv
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 05.10.09 11:35
Оценка:
Здравствуйте, bymer, Вы писали:

B>В этой выводится время. Как я понимаю эта должна выполниться и вернуть управлению в первую


Неправильно понимаете. После fork() оба процесса работают параллельно.

B> и на экране должно появиться Execution continues in parent process. А у меня получается наоборот сначала выводится эта надпись, а потом выводится таймер и терминал начинает подглючивать. Поясните пожалуйста в чем проблема.


Если нужно подождать завершения потомка — делайте это явно.
The God is real, unless declared integer.
Re[2]: проблема с execv
От: bymer  
Дата: 05.10.09 11:49
Оценка:
Здравствуйте, netch80, Вы писали:

N>Если нужно подождать завершения потомка — делайте это явно.


Мне нужно чтобы таймер шел, а родительский процесс продолжал своё выполнение. Как Вы писали что после fork() процессы начинают параллельно работать, то в данном случае у меня получилось, что потомок работает(выводит таймер), а родительский ничего не делает так как вывел нужное сообщение. Я прав?
Re[3]: проблема с execv
От: ДимДимыч Украина http://klug.org.ua
Дата: 05.10.09 13:20
Оценка:
Здравствуйте, bymer, Вы писали:

B>Мне нужно чтобы таймер шел, а родительский процесс продолжал своё выполнение.


А так и есть. В дочернем идет таймер, а родительский продолжает выполняться: выводит сообщение и завершается (т.к. достигнут конец main()).
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.