diff --git a/src/bin/shell/main.c b/src/bin/shell/main.c index 0e3ab9a..33da392 100755 --- a/src/bin/shell/main.c +++ b/src/bin/shell/main.c @@ -57,13 +57,13 @@ printf("UbixOS v0.01a " __DATE__" " __TIME__ " \n"); if (memcmp(buffer,"exec", 4) == 0) { tmp += 5; - if (!fork()) { exec(tmp); } - cPid = fork(); + cPid = fork(); + printf("Pid: [%i]\n",cPid); if (!cPid) { exec(tmp); } else { - while (pidStatus(cPid)); + while (pidStatus(cPid)); } } } diff --git a/src/sys/kernel/fork.c b/src/sys/kernel/fork.c index 1bf26b3..7eeb93d 100755 --- a/src/sys/kernel/fork.c +++ b/src/sys/kernel/fork.c @@ -41,10 +41,9 @@ void sysFork() { //Lets Find A New Task kTask_t * newProcess = findTask(); - pid_t cPid = newProcess->id; - //Set Up Pointer to Return Value int *ret = 0x0; - asm("":"=b" (ret)); + //Set Up Pointer to Return Value + asm("":"=b" (ret)); //Set Up New Tasks Information newProcess->tss.back_link = 0x0; newProcess->tss.esp0 = _current->tss.esp0; @@ -76,13 +75,14 @@ ); newProcess->status = RUNNING; childStart: - if (_current->id == cPid) { + //Set Up Pointer to Return Value + if (_current->id == newProcess->id) { //If We Are The Child We Must Return 0 - ret[0] = 0; - } + *ret = 0; + } else { //If We Are The Parent We Must Return The Childs PID - ret[0] = cPid; + *ret = newProcess->id; } //Return return;