execvp를 사용하여 ls -l, who, cp -r ./aaa//bbb 등과 같은 명령을 실행하고 있습니다. 동일한 명령을 실행하려고 시도 할 때까지는 아무 문제가 없습니다. 두 번째 명령. 예를 들어 나는 ls -l (모든 것이 좋다), who (모든 것이 좋다), ls -l (잘못된 주소)와 같은 순서를 보여줄 것이다. 이것은 내 코드입니다 :execvp에서 동일한 명령을 두 번 이상 실행하지 않습니다.
if(strcmp(com_instr, "issuejob") == 0)
{
pid = fork();
if(pid < 0)
{
perror("Fork");
exit(1);
}
else if(pid == 0)
{
sleep(0.1);
//number of args
read(fd, &t_args, sizeof(int));
printf("t_args %d\n",t_args);
commands = malloc(t_args*sizeof(char *));
for(i=0; i<t_args; i++)
{
commands[i] = malloc(SIZE*sizeof(char));
}
for(i=0; i<t_args; i++)
{
read(fd, commands[i], SIZE);
}
//Receiving data from named-pipe
/*temp_run = run_node->next;
while(temp_run != NULL)
{
printf("jjjjjjjjjjjjjjjjjjjj %d",temp_run->job_id);
temp_run = temp_run->next;
}*/
printf("command %s\n", commands[0]);
execvp(commands[0], commands);
perror("execvp");
exit(1);
}
else if(pid > 0)
{
temp_run = run_node;
for(i=0; i<run_num; i++)
{
if(temp_run->next != NULL) temp_run = temp_run->next;
else break;
}
if((i <= run_num-1) && (wait_node->next == NULL))
{
temp_run->next = malloc(sizeof(run_list));
temp_run = temp_run->next;
saving_data_run(temp_run, j_id, line, 1, arg_num-1, pid);
printf("pid:%d\n",temp_run->pid);
++running;
send_data_for_exec(line, arg_num-1, fd);
}
else
{
temp_wait = wait_node;
while(temp_wait->next != NULL) temp_wait = temp_wait->next;
temp_wait->next = malloc(sizeof(wait_list));
saving_data_wait(temp_wait, j_id, line, 0, arg_num-1, pid);
wait_num++;
}
}
j_id++;
}
나는 char ** 명령에 내 args를 전달하기 위해 명명 된 파이프를 사용합니다. args가 char ** 명령에 올바르게 전달되면 printf를 통해 확인했습니다. execvp에서 한 번 이상 같은 명령을 실행하는 데 문제가 있습니까? 미리 감사드립니다!
나는 포크 먼저 가정? 문제는 포크와 관련이있을 수 있습니다. 여전히 문제를 보여주는 완전한, 최소한의 예제를 제공 할 수 있다면 우리에게는 훨씬 더 쉬워 질 것입니다. –
그래, 나는 fork()를 사용한다. 나는 그것을 편집하려고 노력할 것이다. –
[완성 된 재현 가능한 예] (http://stackoverflow.com/help/mcve)를 제공해주십시오. 프로그램을 실행하고 코드를 쳐다 보는 것보다 충돌이 발생한 곳을 확인하면 문제를 쉽게 파악할 수 있습니다. – Gilles