0

fork()とを使用してプロセスを実行しようとすると問題が発生しexecvp()ます。Pcb引数の配列()を持つ構造体がありますargs

#define MAXARGS 2

struct pcb {
    pid_t pid;             // system process ID
    char *args[MAXARGS];  // program name and args
    int arrivaltime;
    int remainingcputime;
    struct pcb * next;     // links for Pcb handlers
    int priority, memalloc, res1, res2, res3, res4, status;
};
typedef struct pcb Pcb;
typedef Pcb * PcbPtr;

最初のものは実行されるプログラムの名前です。

そしてこれが私のフォーク機能です

PcbPtr startPcb(PcbPtr process) {
    int pid;
    switch (pid=fork()) {
        case -1:
            return NULL;
        case 0:
            execvp(process->args[0], process->args);
        default:
            return process;
    }
    process->status = 2;
    return process;
}

注:process->args[0]これは、現在のディレクトリにある「process」というコンパイル済みプログラムを参照する「process」というconst文字列です。
引数はありません。

gdbを使用して子プロセスに従うと、次のようになります。

[New process 15186]
[Switching to process 15186]
13                              execvp(process->args[0], process->args);
(gdb)

Program received signal SIGTSTP, Stopped (user).
startPcb (process=0x602250) at util.c:13
13                              execvp(process->args[0], process->args);
(gdb)

なぜSIGSTPを受信して​​いるのですか?

4

1 に答える 1

1

args[0] でフルパスを指定していなかったことが判明しました

于 2012-06-07T05:42:55.693 に答える