Project

General

Profile

Bug #705 » vkpid.patch

c.turner, 06/18/2007 12:53 AM

View differences:

share/man/man7/vkernel.7 17 Jun 2007 04:05:58 -0000
.Op Fl i Ar file
.Op Fl I Ar interface Ns Op Ar :address1 Ns Oo Ar :address2 Oc Ns Oo Ar /netmask Oc
.Op Fl m Ar size
.Op Fl p Ar file
.Op Fl r Ar file
.Sh DESCRIPTION
The
......
and
.Cm G
are allowed.
.It Fl p Ar file
Specify a file in which to store the process ID.
A warning is issued if this file cannot be opened for writing.
.It Fl r Ar file
Specify a R/W disk image
.Ar file
sys/platform/vkernel/platform/init.c 18 Jun 2007 00:33:30 -0000
int DiskNum;
struct vknetif_info NetifInfo[VKNETIF_MAX];
int NetifNum;
char *pid_file = NULL;
vm_offset_t KvaStart;
vm_offset_t KvaEnd;
vm_offset_t KvaSize;
......
static void init_vkernel(void);
static void init_disk(char *diskExp[], int diskFileNum, enum vkdisk_type type);
static void init_netif(char *netifExp[], int netifFileNum);
static void writepid( void );
static void cleanpid( void );
static void usage(const char *ctl);
static int save_ac;
......
int c;
int i;
int n;
save_ac = ac;
save_av = av;
......
*/
kernel_mem_readonly = 1;
while ((c = getopt(ac, av, "c:svm:r:e:i:I:U")) != -1) {
while ((c = getopt(ac, av, "c:svm:r:e:i:p:I:U")) != -1) {
switch(c) {
case 'e':
/*
......
}
}
break;
case 'p':
pid_file = optarg;
break;
case 'U':
kernel_mem_readonly = 0;
break;
}
}
writepid();
cpu_disable_intr();
init_sys_memory(memImageFile);
init_kern_memory();
......
static
void
writepid( void )
{
pid_t self = 0;
FILE *file = NULL;
if (pid_file == NULL)
return;
self = getpid();
file = fopen(pid_file, "w");
if (file != NULL) {
fprintf(file, "%ld\n", (long)self);
fclose(file);
}
else {
perror("Warning: couldn't open pidfile");
}
}
static
void
cleanpid( void )
{
if (pid_file == NULL)
return;
if ( unlink(pid_file) != 0 )
perror("Warning: couldn't remove pidfile");
}
static
void
usage(const char *ctl)
{
......
{
kprintf("cpu reset, rebooting vkernel\n");
closefrom(3);
cleanpid();
execv(save_av[0], save_av);
}
......
cpu_halt(void)
{
kprintf("cpu halt, exiting vkernel\n");
cleanpid();
exit(0);
}
(4-4/5)