내가 C에 정말 새로운 오전 ++ 내가의 출력 얻기 위해 노력하고 있어요 :execv의 반환 값을 얻으려면 어떻게해야합니까?
execv("./rdesktop",NULL);
내가 C++에서와 FTP 클라이언트처럼
RHEL 6. 프로그래밍 오전, 나는 모든 좀하고 싶습니다 내 외부 실행 프로그램에서 상태가 업데이트됩니다. 누군가 내가 이것을 할 수있는 방법을 말해 줄 수 있습니까?
내가 C에 정말 새로운 오전 ++ 내가의 출력 얻기 위해 노력하고 있어요 :execv의 반환 값을 얻으려면 어떻게해야합니까?
execv("./rdesktop",NULL);
내가 C++에서와 FTP 클라이언트처럼
RHEL 6. 프로그래밍 오전, 나는 모든 좀하고 싶습니다 내 외부 실행 프로그램에서 상태가 업데이트됩니다. 누군가 내가 이것을 할 수있는 방법을 말해 줄 수 있습니까?
wait
, waitpid
, wait3
또는 wait4
을 호출하여 하위 프로세스의 종료 상태를 검사 할 수 있습니다.
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
pid_t pid = fork();
switch(pid) {
case 0:
// We are the child process
execl("/bin/ls", "ls", NULL);
// If we get here, something is wrong.
perror("/bin/ls");
exit(255);
default:
// We are the parent process
{
int status;
if(waitpid(pid, &status, 0) < 0) {
perror("wait");
exit(254);
}
if(WIFEXITED(status)) {
printf("Process %d returned %d\n", pid, WEXITSTATUS(status));
exit(WEXITSTATUS(status));
}
if(WIFSIGNALED(status)) {
printf("Process %d killed: signal %d%s\n",
pid, WTERMSIG(status),
WCOREDUMP(status) ? " - core dumped" : "");
exit(1);
}
}
case -1:
// fork failed
perror("fork");
exit(1);
}
}
execv
그래서 즉시 사용자가 지정한대로 실행됩니다 실행 있는지를 실행 한 후, 현재 프로세스를 대체합니다.
일반적으로 자식 프로세스에서만 fork
을 수행 한 다음 execv
을 수행합니다. 부모 프로세스는 새 자식의 PID를받습니다.이 PID는 자식의 실행을 모니터링하는 데 사용할 수 있습니다.
반환 값 (예 : 이탈() 또는 유사 결과) 또는 출력 (예 : stdout/stderr)? 당신의 질문 제목은 하나의 것을 말하지만 당신의 질문은 다른 것 :-) –
나는'execv'가 무엇을하는지 이해하지 못합니다; ** ** 귀하의 프로세스를 지정된 프로세스로 대체합니다. 귀하의 프로세스가 더 이상 존재하지 않으므로 캡처 작업을 수행 할 수 없습니다! –
'execv'는 실패한 경우에만 리턴합니다. –