Написание системного вызова для возврата pid процесса - PullRequest
1 голос
/ 01 апреля 2019

Я пишу системный вызов, который возвращает pid процесса, когда вы указываете его имя. Возвращает pid, когда находит значение, или -1, если нет.

Я выполняю все шаги, чтобы написать системный вызов: Добавление системного вызова в таблицу системных вызовов, добавление его в файл syscalls.h, изменение linux / Makefile, создание каталога с именем pname. Компиляция прошла гладко, все закончено. Это мой pname.c

#include <linux/syscalls.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/init.h>
#include <linux/tty.h>
#include <linux/string.h>
#include "pname.h"
asmlinkage int pnametoid(char* name){

 struct task_struct *task;

 struct tty_struct *my_tty;

 my_tty = get_current_tty();

 for_each_process(task){

 if(strcmp(task->comm, name) == 0)
    return task->pid;
 }
 return -1;
}

Это моя тестовая программа test.c

#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <string.h>
int main(){
 char name[32];
 puts("Enter process to find");
 scanf("%s",name);
 strtok(name, "\n");
 int status = syscall(317, name); //syscall number 317 and passing in the 
string. 
printf("System call returned %d\n", status);
return 0;
}

Я пытаюсь ввести имена процессов, такие как "test" или "sshd", но возвращаемое значение всегда -1 вместо pid. Что я сделал не так?

...