簡體   English   中英

如何殺死 Linux Kernel 線程?

[英]How to kill Linux Kernel Thread?

我正在開發 Linux kernel 模塊。 該模塊正在與我的用戶空間 C 應用程序進行通信。 在這個模塊中,我正在創建一個線程。 這是我面臨問題的模塊的一部分:

static struct task_struct *thread1;

static ssize_t read_pid(struct file *pfile, char __user *buffer, size_t length, loff_t *offset)
{

unsigned int rand;
get_random_bytes(&rand, sizeof(rand));
rand = rand % 250;
char our_thread[20];
sprintf(our_thread, "thread%u", rand);

if(thread1==NULL)
{
thread1 = kthread_create(read_in_thread,&args,our_thread);
    if((thread1))
        {
            printk(KERN_INFO "Thread is created\n");
            printk("thread name %s\n", our_thread);
            // lancement du thread
            wake_up_process(thread1);
            printk(KERN_INFO "Thread is awake\n");
        }
}

else

printk("THREAD1 IS NOT NULL!!! CAN NOT CREATE THREAD!!!\n");

}

當我第一次執行我的用戶空間程序時,一切都運行良好,它會在控制台上為我打印:

Thread is created 
thread name
Thread is awake 

但是當我按Ctrl+C退出正在運行的用戶空間代碼並再次執行時,它會打印:

THREAD1 IS NOT NULL!!! CAN NOT CREATE THREAD!!!

我認為*thread1不是免費的或者線程沒有被殺死。 我認為我需要在else語句下終止線程,以便在重新運行程序時創建另一個線程。

有人可以幫我嗎? 謝謝你。

請嘗試Cntrl+Z殺死線程。 如果您不關心線程的依賴關系,或以下過程可能會有所幫助。 ps -e -T | grep myp | grep -v grep ps -e -T | grep myp | grep -v grep kill pid#

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM