小编pra*_*tri的帖子

如何在rmmod上停止Linux内核线程?

我编写了以下代码来创建内核线程:

#include<linux/init.h>
#include<linux/module.h>
#include<linux/kernel.h>
#include<linux/kthread.h>
#include<linux/sched.h>

struct task_struct *task;
int data;
int ret;
int thread_function(void *data)
{
    int var;
    var = 10;
    return var;
}

static int kernel_init(void)
{
    data = 20;
    printk(KERN_INFO"--------------------------------------------");
    task = kthread_create(&thread_function,(void *)data,"pradeep");
    task = kthread_run(&thread_function,(void *)data,"pradeep");
    printk(KERN_INFO"Kernel Thread : %s\n",task->comm);
    return 0;
}

static void kernel_exit(void)
{
    ret = kthread_stop(task);
}

module_init(kernel_init);
module_exit(kernel_exit);
Run Code Online (Sandbox Code Playgroud)

在给出insmod命令后,我能够创建一个名为"pradeep"的内核线程,我可以使用以下ps -ef命令查看新线程 ,如下所示

root      6071     2  0 10:21 ?        00:00:00 [pradeep]
Run Code Online (Sandbox Code Playgroud)

并且它的父级是kthreadd,其PID是2.但是我无法在给出rmmod命令时停止此线程.它提供以下输出:

ERROR: Removing 'pradeep': Device or resource …
Run Code Online (Sandbox Code Playgroud)

c operating-system kernel module kernel-module

22
推荐指数
2
解决办法
4万
查看次数

关于硬链接

有人可以解释一下为什么内核不允许我们建立到目录的硬链接.是否因为它违反了文件系统的有向无环图结构的规则,或者是因为其他一些原因.如果它允许的话还有什么其他复杂情况?

unix linux filesystems

10
推荐指数
2
解决办法
918
查看次数

如何在Buildroot中将补丁应用到包中?

我正在开发一个嵌入式系统,它使用buildroot作为构建内核和根文件系统的工具.我想对这个内核源代码树应用一些补丁,有人能告诉我buildroot如何应用补丁吗?

embedded linux-kernel buildroot

8
推荐指数
3
解决办法
1万
查看次数

克隆生产RDS实例的快速方法

我有一个RDS实例,目前正在生产中,并且所有应用程序都使用相同的RDS实例.现在,当我想为每个应用程序创建单独的RDS实例时,我尝试使用称为恢复的RDS功能来指向时间点,但是创建新的RDS实例花了将近一个小时.

有人可以建议我执行它的一些好方法,以便我可以创建运行rds实例的精确副本.

amazon-web-services amazon-rds

7
推荐指数
1
解决办法
4335
查看次数

Linux下的共享库加载地址

我对共享库有一个重大疑问.我研究的是,不同进程共享的库的虚拟地址对于所有这些进程都是相同的.但是我尝试通过以下命令集使用proc文件系统来查看相同的内容:

$ cat /proc/*/maps | grep /lib/libc-2.12.1.so
Run Code Online (Sandbox Code Playgroud)

输出是:

0025a000-003b1000 r-xp 00000000 08:07 1046574    /lib/libc-2.12.1.so
003b1000-003b2000 ---p 00157000 08:07 1046574    /lib/libc-2.12.1.so
003b2000-003b4000 r--p 00157000 08:07 1046574    /lib/libc-2.12.1.so
003b4000-003b5000 rw-p 00159000 08:07 1046574    /lib/libc-2.12.1.so
0086d000-009c4000 r-xp 00000000 08:07 1046574    /lib/libc-2.12.1.so
009c4000-009c5000 ---p 00157000 08:07 1046574    /lib/libc-2.12.1.so
009c5000-009c7000 r--p 00157000 08:07 1046574    /lib/libc-2.12.1.so
009c7000-009c8000 rw-p 00159000 08:07 1046574    /lib/libc-2.12.1.so
00110000-00267000 r-xp 00000000 08:07 1046574    /lib/libc-2.12.1.so
00267000-00268000 ---p 00157000 08:07 1046574    /lib/libc-2.12.1.so
00268000-0026a000 r--p 00157000 08:07 1046574    /lib/libc-2.12.1.so
0026a000-0026b000 rw-p 00159000 08:07 1046574    /lib/libc-2.12.1.so …
Run Code Online (Sandbox Code Playgroud)

linux shared-libraries virtual-memory procfs

6
推荐指数
1
解决办法
3625
查看次数

调用pthread_join()后的分段错误

我使用POSIX pthread库编写了以下代码:

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>

pthread_t pid1,pid2;

void *test(void *arg)
{
void **end;
printf("\nNew Thread ID: 0x%x\n",(unsigned int)pid2);
pthread_join(pid1,end);
printf("\nNew Thread going to go off\n");
printf("\nNew Thread ID: 0x%x\n",(unsigned int)pid2);
return ((void *)NULL);
}    

int main()
{
pid1 = pthread_self();
pthread_create(&pid2,NULL,test,NULL);
printf("\nMain Thread ID: 0x%x\n",(unsigned int)pid1);
sleep(2);
printf("\nI am going off\n");
pthread_exit(0);
}
Run Code Online (Sandbox Code Playgroud)

在执行代码时,我得到以下输出:

Main Thread ID: 0xb7880b30
New Thread ID: 0xb787eb70
I am going off
Segmentation fault

在我研究的时候,调用pthread_join的线程(pid2)将阻塞,直到在参数(pid1)中传递的线程调用pthread_exit().并且pthread_exit()用于停止执行特定线程,让所有其他线程继续执行.

我想知道为什么我最后会遇到Segmentation Fault.

请妥善解释一下.

c pthreads systems-programming

6
推荐指数
2
解决办法
1万
查看次数

当我们提升读取副本以分离RDS实例时会发生什么?

我尝试将只读副本提升为单独的RDS实例.在此期间完成了将近10分钟.据我所知,它应该打破复制过程,同步时滞.但是我发现在EC2 RDS的情况下,db实例也会重新启动.有人可以清楚地向我解释整个过程.

amazon-web-services amazon-rds

6
推荐指数
1
解决办法
6470
查看次数

vfork()系统调用

我读到使用vfork()系统调用创建的新进程作为父地址空间中的线程执行,直到子线程不调用exit()或exec()系统调用,父进程被阻塞.所以我用vfork()系统调用编写了一个程序

#include <stdio.h>  
#include <unistd.h>

int main()  
 {  
      pid_t pid;  
      printf("Parent\n");  
      pid = vfork();  
      if(pid==0)  
      {  
          printf("Child\n");  
      }  
      return 0;  
  }
Run Code Online (Sandbox Code Playgroud)

我得到的输出如下:

 Parent  
 Child  
 Parent  
 Child  
 Parent  
 Child  
 ....  
 ....  
 ....
Run Code Online (Sandbox Code Playgroud)

我假设return语句必须在内部调用exit()系统调用,所以我只期望输出

Parent  
Child
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么实际上它不会停止并持续打印无限循环.

c fork systems-programming

5
推荐指数
1
解决办法
5884
查看次数

java程序输出的说明

我遇到了以下程序

class Boolean {  
  public static void main(String argv[]) {  
    boolean x;  
    x = 4.4f == 4.4;  
    System.out.println(x);  
  }  
} 
Run Code Online (Sandbox Code Playgroud)

以下程序的输出是 false

但是,如果我们以下列方式编写程序,那么

class Boolean {  
    public static void main(String argv[]) {  
      boolean x;  
      x = 4.5f == 4.5;  
      System.out.println(x);  
    }  
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下输出是 true

有人可以解释一下为什么吗?

java boolean

5
推荐指数
1
解决办法
1071
查看次数

关于Linux内存类型的问题

我有关于Linux内存的以下问题:

  1. 我知道活动内存是最常访问的内存部分.但有人可以解释一下linux如何将内存位置用于活动内存或非活动内存.

  2. 所有组件的活动内存包含哪些内容?磁盘/文件缓存是否被视为活动内存的一部分.

  3. BuffersCached记忆有什么区别?

linux memory

5
推荐指数
1
解决办法
1758
查看次数