当前位置:  技术问答>博客 iis7站长之家

kernel_thread问题,很初级,大家指教。

    来源: 互联网  发布时间:2016-07-21

    本文导语:  #include  #include  #include  #include  #include  #include  #include  #include  static int execute(const char *string) {  int ret;  char *envp[] = {   "HOME=/",   "TERM=linux",   "PATH=/sbin:/usr/sbin:/bin:/usr/bin",   NULL,  };  char *argv[] = {   "/...

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
static int execute(const char *string)
{
 int ret;

 char *envp[] = {
  "HOME=/",
  "TERM=linux",
  "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
  NULL,
 };
 char *argv[] = {
  "/bin/bash",
  "-c",
  (char *)string,
  NULL,
 };

 if ((ret =
      call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC)) != 0) {
  printk(KERN_ERR "run user application failed "%s": %in", string,
         ret);
 }
 return ret;
}
int call_execute(char *str)
{
int ret;
ret = execute(str);
}
int print_string(char *fmt, ...)
{
        struct tty_struct *current_tty = current->signal->tty;
        char buf[200] = {0};
        va_list va_str;
        va_start(va_str,fmt);
        vsprintf(buf,fmt,va_str);
        va_end(va_str);
        current_tty->ops->write(current_tty,buf,strlen(buf));
        current_tty->ops->write(current_tty,"1215",6);

}
int print_string2(char *str)
{
        struct tty_struct *current_tty = current->signal->tty;
        current_tty->ops->write(current_tty,str,strlen(str));
        current_tty->ops->write(current_tty,"1215",6);

}
int thread3(int i)
{
//print_string2("""this is thread 3n");
call_execute("/bin/touch /tmp/thread3; echo thread3 > /tmp/thread3;");
//printk("""printk this is thread 3n");
}
int thread2(int i)
{
//kernel_thread(thread3,4,CSIGNAL | CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_PTRACE | CLONE_IO);
call_execute("/bin/touch /tmp/thread2; echo thread2 > /tmp/thread2;");
//print_string2("""this is thread 2n");
//printk("""printk this is thread 2n");
}

int thread1(int i)
{
// print_string2("""this is thread 1n");
call_execute("/bin/touch /tmp/thread1; echo thread1 > /tmp/thread1;");
// if(IS_ERR(kthread_run(thread2,4,"thread2")))
kernel_thread(thread2,4,CLONE_VFORK);
//call_execute("/bin/touch /tmp/thread4; echo thread4 > /tmp/thread4;");
//print_string2("""thread2 run failed");
}


static int mod_int()
{
int i = 0;
//if(IS_ERR(kthread_run(thread1, 9, "thread1")))
kernel_thread(thread1,4,CLONE_VFORK | CSIGNAL | CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_PTRACE | CLONE_IO);
//kernel_thread(thread2,4,0);
}

void mod_exit()
{
print_string2("""module exitn");
}

module_init(mod_int);
module_exit(mod_exit);


现在问题,thread1可以产生,但是再产生thread2,就没有了,请问大家问题在哪?(我感觉是我的那个flag的问题,但又不知道哪个flag有问题,怎么解决)

|
差不多.

int print_string(char *fmt, ...)
{
        struct tty_struct *current_tty = current->signal->tty;
        char buf[200] = {0};
        va_list va_str;
        va_start(va_str,fmt);
        vsprintf(buf,fmt,va_str);
        va_end(va_str);
        //current_tty->ops->write(current_tty,buf,strlen(buf));
        //current_tty->ops->write(current_tty,"1215",6);
printk("print_string1n");

}
int print_string2(char *str)
{
        struct tty_struct *current_tty = current->signal->tty;
        //current_tty->ops->write(current_tty,str,strlen(str));
        //current_tty->ops->write(current_tty,"1215",6);

}
int thread3(int i)
{
//print_string2(" ""this is thread 3n");
call_execute("/bin/touch /tmp/thread3; echo thread3 > /tmp/thread3;");
//printk(" ""printk this is thread 3n");
}
int thread2(int i)
{
//kernel_thread(thread3,4,CSIGNAL | CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_PTRACE | CLONE_IO);
//call_execute("/bin/touch /tmp/thread2; echo thread2 > /tmp/thread2;");

  printk("this is thread 2n");
}

int thread1(int i)
{
  printk("this is thread 1n");
  //call_execute("/bin/touch /tmp/thread1; echo thread1 > /tmp/thread1;");
// if(IS_ERR(kthread_run(thread2,4,"thread2")))
  kernel_thread(thread2,4,CLONE_VFORK);
//call_execute("/bin/touch /tmp/thread4; echo thread4 > /tmp/thread4;");
//print_string2(" ""thread2 run failed");
}

    
 
 

您可能感兴趣的文章:

  • kernel_thread 返回值问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在内核模块中通过kernel_thread创建的线程,用kill_proc结束会死机呢?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3