Exemplo n.º 1
0
/* 
	* do_bgfg - Execute the builtin bg and fg commands
	*/
void do_bgfg(char **argv) 
{
	if (argv[1] == NULL) {
		printf("%s command requires PID or %%jobid argument\n", argv[0]);
		return;
	}

	if (!isdigit(argv[1][0]) && argv[1][0] != '%') {
		printf("%s: argument must be a PID or %%jobid\n", argv[0]);
		return;
	}

	if (argv[1][0] == '%' ? 1 : 0) {
		if (getjobjid(jobs, atoi(&argv[1][1])) == NULL) {
			printf("%s: No such job\n", argv[1]);
			return;
		}
	} else {
		if (getjobjid(jobs, atoi(&argv[1][1])) == NULL) {
			printf("(%d): No such process\n", atoi(argv[1]));
			return;
		}
	}

	// This is my favourite code
	__kill(-getjobjid(jobs, atoi(&argv[1][1]))->pid, SIGCONT);
	getjobjid(jobs, atoi(&argv[1][1]))->state = strcmp(argv[0], "fg")==0?FG:BG;
	if (strcmp(argv[0], "fg")==0) waitfg(getjobjid(jobs, atoi(&argv[1][1]))->pid); else printf("[%d] (%d) %s", getjobjid(jobs, atoi(&argv[1][1]))->jid, getjobjid(jobs, atoi(&argv[1][1]))->pid, getjobjid(jobs, atoi(&argv[1][1]))->cmdline);
}
Exemplo n.º 2
0
static void segfault(int code, unsigned long error, void *addr)
{
	kprintf("Segmentation fault: %s mode %s at 0x%p%s\n",
			(error & PGF_USER) ? "user" : "kernel",
			(error & PGF_WRITE) ? "write" : "read",
			addr,
			(error & PGF_PERM) ? "" : " (page not present)");
	dump_context(current->esp);
	if (is_kernel_context(current->esp))
		panic("Segfault in kernel");
	__kill(current, SIGSEGV, code);
}
Exemplo n.º 3
0
void
__pthread_abort(void)
{
	PTHREAD_NORETURN void (*_libc_abort)(void);
	_libc_abort = dlsym(RTLD_DEFAULT, "abort");

	if (_libc_abort) {
		_libc_abort();
	} else {
		__kill(__getpid(), __SIGABRT, 0);
	}
}
Exemplo n.º 4
0
void exn_ill_instr(void)
{
	kprintf("Illegal instruction\n");
	__kill(current, SIGILL, ILL_ILLOPC); // FIXME: determine correct code
}
Exemplo n.º 5
0
void exn_fpe(void)
{
	kprintf("Arithmetic error\n");
	__kill(current, SIGFPE, FPE_INTDIV); // TODO: more codes
}
Exemplo n.º 6
0
/* Raise the signal SIG.  */
int
raise (int sig)
{
  return __kill (__getpid (), sig);
}