gpt4 book ai didi

c - fork() 和 execvp()

转载 作者:行者123 更新时间:2023-11-30 15:56:48 26 4
gpt4 key购买 nike

我在尝试使用 fork()execvp() 执行进程时遇到问题。我有一个 struct 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;

第一个是要执行的程序的名称。

这是我的 fork 函数

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?

最佳答案

原来我没有在 args[0] 中指定完整路径

关于c - fork() 和 execvp(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10925921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com