Аз съм наистина нов за C + + и се опитвам да получа продукцията от:
execv("./rdesktop",NULL);
Аз съм програмиране в C + + и RHEL 6.
Подобно на FTP клиент, бих искал да получа всички актуализации на състоянието от моята външна работеща програма. Може ли някой да ми каже как мога да направя това?
Отговори:
1 за отговор № 1Можете да разгледате изходния статус на детето чрез обаждане 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 %dn", pid, WEXITSTATUS(status));
exit(WEXITSTATUS(status));
}
if(WIFSIGNALED(status)) {
printf("Process %d killed: signal %d%sn",
pid, WTERMSIG(status),
WCOREDUMP(status) ? " - core dumped" : "");
exit(1);
}
}
case -1:
// fork failed
perror("fork");
exit(1);
}
}
4 за отговор № 2
execv
замества текущия процес, така че веднага след изпълнението му това, което ще изпълнява, ще бъде кой да е изпълним.
Обикновено правите fork
, и тогава execv
само в детския процес. Основният процес получава PID на новото дете, което може да използва за наблюдение на изпълнението на детето.