0
我在使用fork()
和execvp()
嘗試執行進程時遇到了問題。我有一個結構Pcb
其具有參數數組(args
):fork()和execvp()
#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]
就是所謂的「處理」的常量字符串是指在當前目錄中稱爲「過程」編譯的程序。
沒有參數。
當我使用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?
如果您在gdb中不進行跟蹤,會發生這種情況嗎? – bdonlan
yes:「[24] +已停止./hostd feed」 – Milk
嘗試運行'strace -ff -o trace。/ yourprogram',並粘貼它將創建的'trace.NNNNN'文件。這將列出您的程序正在執行的所有系統調用 - 在比gdb更低的級別會顯示您。 – bdonlan