führen Sie ein Programm im hintergrund mit execvp Systemaufruf in c

bin ich ein Programm schreiben, das erhält einen Kommandonamen und Argumente und Optional auch den string "bg" am Ende , wenn die "bg" Zeichenfolge übergeben wird mein Programm ausgeführt wird der Befehl mit den Argumenten in den hintergrund, wenn nicht im Vordergrund, hier ist mein code:

#include<sys/types.h>   
#include<sys/wait.h>    
#include<unistd.h>
#include<stdio.h>
#include<errno.h>
#include <stdlib.h>
#include <string.h>


int main(int argc, char* argv[])
{

pid_t pid;
int state;

if( (pid=fork())<0) {
    perror("\nError in fork");
    exit(-1);
} 
else if(pid==0) {  
    if(strcmp(argv[argc-1], "bg") == 0 ){
        strcpy(argv[argc-1],"&");
        if( (execvp(argv[1], argv)<0)) {
            perror("\nError in first execvp");
            exit(-1);
        }
    }
    else{
        if( (execvp(argv[1], argv+1)<0)) {
            perror("\nError en second el execvp");
            exit(-1);
        }
    }   

}    
wait(&state);
printf("\nMy child %d terminated with state %d\n",pid,state);

exit(0);

}

Eingang Beispiel:

./myprogram ls -lai bg   //in this case my program should execute "ls -lai" in background
./myprogram ls -lai      //in this case it should execute command normally in foreground 

mein code funktioniert, wenn die bg-argument nicht übergeben, aber wenn Sie übergeben, ich habe versucht, ersetzen Sie es mit "&" aber es hat nicht funktioniert, Hilfe ist willkommen Jungs.

  • Verstehen Sie, was es bedeutet, "ein Programm ausführen im hintergrund"?
  • & nicht verarbeitet execvp(), es verarbeitet, von der shell, ähnlich wie die Art und Weise der Verarbeitung der bg token. Da bist du nicht die shell verwenden, um den Befehl ausführen, wird es keine Wirkung haben wird.
  • Wenn Sie möchten, um es zu laufen im hintergrund, nur Ausfahrt, ohne wait().
  • Lesen Sie advancedlinuxprogramming.com
  • Vazquez-Abrams ja ich denke mal das ist eine Hausaufgabe.
  • Sie raten also? Dein code zeigt etwas anderes.

InformationsquelleAutor Mustapha | 2013-12-26
Schreibe einen Kommentar