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を受信しているのですか?