首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >叉()和execvp()

叉()和execvp()
EN

Stack Overflow用户
提问于 2012-06-07 04:59:44
回答 1查看 1.3K关注 0票数 0

我在使用fork()execvp()执行进程时遇到了问题。我有一个结构Pcb,它有一个参数数组(args):

代码语言:javascript
复制
#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;

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

这是我的分叉功能

代码语言:javascript
复制
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“的const字符串,它指的是当前目录中名为'process‘的编译程序。

没有争论。

当我使用gdb并遵循子进程时,它只是说:

代码语言:javascript
复制
[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?

EN

回答 1

Stack Overflow用户

发布于 2012-06-07 05:42:55

原来我没有在args中指定完整的路径

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10925921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档