Я пишу системный вызов, который возвращает 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. Что я сделал не так?