本文整理汇总了C++中do_fork函数的典型用法代码示例。如果您正苦于以下问题:C++ do_fork函数的具体用法?C++ do_fork怎么用?C++ do_fork使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了do_fork函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: sys_clone
long sys_clone(unsigned long clone_flags, unsigned long newsp,
int __user *parent_tid, void *newtls, int __user *child_tid)
{
long ret;
if (!newsp)
newsp = UPT_SP(¤t->thread.regs.regs);
current->thread.forking = 1;
ret = do_fork(clone_flags, newsp, ¤t->thread.regs, 0, parent_tid,
child_tid);
current->thread.forking = 0;
return ret;
}
开发者ID:DirtyDroidX,项目名称:android_kernel_htc_m8ul,代码行数:14,代码来源:syscalls_32.c
示例2: kernel_thread
/*
* Create a kernel thread
*/
int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
{
struct pt_regs regs;
memset(®s, 0, sizeof(regs));
/* Don't use r10 since that is set to 0 in copy_thread */
regs.r11 = (unsigned long)fn;
regs.r12 = (unsigned long)arg;
regs.irp = (unsigned long)kernel_thread_helper;
/* Ok, create the new process.. */
return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL, NULL);
}
开发者ID:BackupTheBerlios,项目名称:tuxap,代码行数:17,代码来源:process.c
示例3: sys_clone
int sys_clone(struct pt_regs *regs)
{
unsigned long clone_flags;
unsigned long newsp;
int __user *parent_tidptr, *child_tidptr;
clone_flags = regs->bx;
newsp = regs->cx;
parent_tidptr = (int __user *)regs->dx;
child_tidptr = (int __user *)regs->di;
if (!newsp)
newsp = regs->sp;
return do_fork(clone_flags, newsp, regs, 0, parent_tidptr, child_tidptr);
}
开发者ID:Aircell,项目名称:asp-kernel,代码行数:14,代码来源:process_32.c
示例4: sys_clone
asmlinkage int sys_clone(struct pt_regs regs)
{
unsigned long clone_flags;
unsigned long newsp;
int __user *parent_tidptr, *child_tidptr;
clone_flags = regs.ebx;
newsp = regs.ecx;
parent_tidptr = (int __user *)regs.edx;
child_tidptr = (int __user *)regs.edi;
if (!newsp)
newsp = regs.esp;
return do_fork(clone_flags, newsp, ®s, 0, parent_tidptr, child_tidptr);
}
开发者ID:b3rnik,项目名称:dsl-n55u-bender,代码行数:14,代码来源:process.c
示例5: daemon
int daemon(int nochdir, int noclose, boost::system::error_code &ec)
{
int status = 0;
//openlog("daemonize", LOG_PID, LOG_DAEMON);
// fork once to go into the background.
if((status = do_fork()) < 0 )
;
// create new session
else if(setsid() < 0) // shouldn't fail
status = -1;
// fork again to ensure that daemon never reacquires a control terminal.
else if((status = do_fork()) < 0 )
;
else
{
// clear any inherited umask(2) value
umask(0);
// we're there.
if(!nochdir)
{
// go to a neutral corner.
chdir("/");
}
if(!noclose)
{
redirect_fds(ec);
}
}
return status;
}
开发者ID:retf,项目名称:Boost.Application,代码行数:37,代码来源:server_application_impl.hpp
示例6: kernel_thread
/*
* Create a kernel thread.
*/
long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
{
struct pt_regs regs;
memset(®s, 0, sizeof(regs));
regs.regs[6] = (unsigned long) arg;
regs.regs[5] = (unsigned long) fn;
regs.cp0_epc = (unsigned long) kernel_thread_helper;
regs.cp0_psr = (regs.cp0_psr & ~(0x1|0x4|0x8)) | \
((regs.cp0_psr & 0x3) << 2);
return do_fork(flags | CLONE_VM | CLONE_UNTRACED, \
0, ®s, 0, NULL, NULL);
}
开发者ID:CSCLOG,项目名称:beaglebone,代码行数:18,代码来源:process.c
示例7: kernel_thread
pid_t kernel_thread(int (*fn) (void *), void *arg, unsigned long flags)
{
struct pt_regs regs;
memset(®s, 0, sizeof(regs));
regs.r1 = (unsigned long)arg;
regs.p1 = (unsigned long)fn;
regs.pc = (unsigned long)kernel_thread_helper;
regs.orig_p0 = -1;
regs.ipend = 0x8002;
__asm__ __volatile__("%0 = syscfg;":"=da"(regs.syscfg):);
return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL,
NULL);
}
开发者ID:Blackburn29,项目名称:PsycoKernel,代码行数:15,代码来源:process.c
示例8: plat_boot
void plat_boot(void) {
int i;
for (i=0; init[i]; i++) {
init[i]();
}
init_sys_mmu();
start_mmu();
task_init();
timer_init();
init_page_map();
kmalloc_init();
ramdisk_driver_init();
romfs_init();
i = do_fork(test_process, (void *)0x1);
i = do_fork(test_process, (void *)0x2);
while (1) {
delay ();
printk("this is the original process\n");
}
}
开发者ID:duskast,项目名称:learning,代码行数:24,代码来源:boot.c
示例9: kernel_thread
int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
{
struct pt_regs regs;
memset(®s, 0, sizeof(regs));
regs.r11 = (unsigned long)fn;
regs.r12 = (unsigned long)arg;
regs.irp = (unsigned long)kernel_thread_helper;
regs.dccr = 1 << I_DCCR_BITNR;
return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL, NULL);
}
开发者ID:Blackburn29,项目名称:PsycoKernel,代码行数:15,代码来源:process.c
示例10: daemonize
static void daemonize()
{
int fd, fdlimit;
const char *chdir_root = "/";
do_fork();
if ( setsid() < 0 )
{
exit(EXIT_FAILURE);
}
do_fork();
umask(0);
if ( chdir(chdir_root) < 0)
{
exit(EXIT_FAILURE);
}
/* Close all open files. */
fdlimit = sysconf (_SC_OPEN_MAX);
for ( fd=0; fd<fdlimit; ++fd )
{
close(fd);
}
/* Open 0, 1 and 2. */
open("/dev/null", O_RDWR);
if ( dup(0) != 1 )
{
exit(EXIT_FAILURE);
}
if ( dup(0) != 2 )
{
exit(EXIT_FAILURE);
}
}
开发者ID:lwes,项目名称:lwes-journaller,代码行数:36,代码来源:lwes-journaller.c
示例11: kernel_thread
int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
{
struct pt_regs regs;
memset(®s, 0, sizeof(regs));
/*
* Yes, we're exploting illicit knowledge of the ABI here.
*/
regs.r00 = (unsigned long) arg;
regs.r01 = (unsigned long) fn;
pt_set_elr(®s, (unsigned long)kernel_thread_helper);
pt_set_kmode(®s);
return do_fork(flags|CLONE_VM|CLONE_UNTRACED, 0, ®s, 0, NULL, NULL);
}
开发者ID:AllenDou,项目名称:linux,代码行数:15,代码来源:process.c
示例12: kernel_thread
int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
{
struct pt_regs regs;
memset(®s, 0, sizeof(regs));
/* store them in non-volatile registers */
regs.r5 = (unsigned long)fn;
regs.r6 = (unsigned long)arg;
local_save_flags(regs.msr);
regs.pc = (unsigned long)kernel_thread_helper;
regs.pt_mode = 1;
return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0,
®s, 0, NULL, NULL);
}
开发者ID:7L,项目名称:pi_plus,代码行数:15,代码来源:process.c
示例13: _sys_clone
static_unused int _sys_clone(nabi_no_regargs struct pt_regs regs)
{
unsigned long clone_flags;
unsigned long newsp;
int *parent_tidptr, *child_tidptr;
clone_flags = regs.regs[4];
newsp = regs.regs[5];
if (!newsp)
newsp = regs.regs[29];
parent_tidptr = (int *) regs.regs[6];
child_tidptr = (int *) regs.regs[7];
return do_fork(clone_flags & ~CLONE_IDLETASK, newsp, ®s, 0,
parent_tidptr, child_tidptr);
}
开发者ID:iPodLinux,项目名称:linux-2.6.7-ipod,代码行数:15,代码来源:syscall.c
示例14: main
int
main(int ac, char **av)
{
if (ac < 2) goto usage;
if (!strcmp("procedure", av[1])) {
BENCH(do_procedure(ac), 0);
micro("Procedure call", get_n());
} else if (!strcmp("fork", av[1])) {
BENCH(do_fork(), 0);
#ifdef STATIC
micro("Static Process fork+exit", get_n());
#else
micro("Process fork+exit", get_n());
#endif
} else if (!strcmp("dfork", av[1])) {
BENCH(do_dfork(), 0);
#ifdef STATIC
micro("Static Process double fork+exit", get_n());
#else
micro("Process double fork+exit", get_n());
#endif
} else if (!strcmp("exec", av[1])) {
BENCH(do_forkexec(), 0);
#ifdef STATIC
micro("Static Process fork+execve", get_n());
#else
micro("Process fork+execve", get_n());
#endif
} else if (!strcmp("dforkexec", av[1])) {
BENCH(do_dforkexec(), 0);
#ifdef STATIC
micro("Static Process double fork+execve", get_n());
#else
micro("Process double fork+execve", get_n());
#endif
} else if (!strcmp("shell", av[1])) {
BENCH(do_shell(), 0);
#ifdef STATIC
micro("Static Process fork+/bin/sh -c", get_n());
#else
micro("Process fork+/bin/sh -c", get_n());
#endif
} else {
usage: printf("Usage: %s fork|exec|shell|dfork|dforkexec\n", av[0]);
}
return(0);
}
开发者ID:ash9211,项目名称:graphene,代码行数:48,代码来源:lat_proc.c
示例15: kernel_thread
int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
{
struct pt_regs regs;
memset(®s, 0, sizeof(regs));
regs.r0 = (unsigned long)arg;
regs.r1 = (unsigned long)fn;
regs.r2 = (unsigned long)do_exit;
regs.lr = (unsigned long)kernel_thread_helper;
regs.pc = (unsigned long)kernel_thread_helper;
regs.sr = MODE_SUPERVISOR;
return do_fork(flags | CLONE_VM | CLONE_UNTRACED,
0, ®s, 0, NULL, NULL);
}
开发者ID:qwerty1023,项目名称:wive-rtnl-firmware,代码行数:16,代码来源:process.c
示例16: _sys_clone
asmlinkage long _sys_clone(unsigned long clone_flags, unsigned long newsp,
int __user *parent_tid, int __user *child_tid,
struct pt_regs *regs)
{
long ret;
/* FIXME: Is alignment necessary? */
/* newsp = ALIGN(newsp, 4); */
if (!newsp)
newsp = regs->sp;
ret = do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid);
return ret;
}
开发者ID:08opt,项目名称:linux,代码行数:16,代码来源:sys_or32.c
示例17: kernel_thread
int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
{
struct pt_regs regs;
memset(®s, 0, sizeof (regs));
regs.r1 = (unsigned long)fn;
regs.r2 = (unsigned long)arg;
regs.bpc = (unsigned long)kernel_thread_helper;
regs.psw = M32R_PSW_BIE;
/* Ok, create the new process. */
return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0, NULL,
NULL);
}
开发者ID:007kumarraja,项目名称:rockchip-rk3188-mk908,代码行数:16,代码来源:process.c
示例18: nios2_clone
/* We don't want to use generic sys_clone because Nios II passes all arguments
* on stack. And we need to save all these registers, which means we need
* push all these registers on top of pt_regs. So, it is better to pass in
* pt_regs* and extract the arguments for do_fork() from here.
*/
asmlinkage int nios2_clone(struct pt_regs *regs)
{
unsigned long flags;
unsigned long newsp;
int __user *parent_tidptr, *child_tidptr;
flags = regs->r4;
newsp = regs->r5;
if (newsp == 0)
newsp = regs->sp;
parent_tidptr = (int __user *) regs->r6;
child_tidptr = (int __user *) regs->r8;
return do_fork(flags, newsp, 0, parent_tidptr, child_tidptr);
}
开发者ID:xinyun,项目名称:lark_board_amp_ref_design,代码行数:21,代码来源:sys_nios2.c
示例19: _sys_clone
asmlinkage long _sys_clone(unsigned long clone_flags, unsigned long newsp,
int __user *parent_tid, int __user *child_tid,
struct pt_regs *regs)
{
long ret;
if (!newsp)
newsp = regs->sp;
ret = do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid);
return ret;
}
开发者ID:Blackburn29,项目名称:PsycoKernel,代码行数:16,代码来源:sys_or32.c
示例20: kernel_thread
/*
* create a kernel thread
*/
int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
{
struct pt_regs regs;
memset(®s, 0, sizeof(regs));
regs.a2 = (unsigned long) fn;
regs.d2 = (unsigned long) arg;
regs.pc = (unsigned long) kernel_thread_helper;
local_save_flags(regs.epsw);
regs.epsw |= EPSW_IE | EPSW_IM_7;
/* Ok, create the new process.. */
return do_fork(flags | CLONE_VM | CLONE_UNTRACED, 0, ®s, 0,
NULL, NULL);
}
开发者ID:Conap30,项目名称:htc_kernel_desirec_bfs,代码行数:19,代码来源:process.c
注:本文中的do_fork函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论