我在尝试使用fork()and执行进程时遇到问题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”的编译程序。
没有论据。
当我使用 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?