Есть ли способ проверить, соответствует ли данный PID какому-либо процессу в пространстве ядра?
Я создаю системный вызов, который изменяет вес настраиваемого взвешенного циклического планировщика.
I хотел бы проверить перед вызовом find_task_by_vpid(pid)
, чтобы избежать вызова этой функции, если PID недействителен (т. е. нет процесса, который имеет это значение PID).
Это потому, что если используется недопустимый PID, моя виртуальная машина падает. Поэтому я хотел бы выполнить проверку и вернуть значение ошибки -ESRCH
обратно в пространство пользователя.
Есть ли для этого функция проверки?
Или можно проверить, или не find_task_by_vpid(pid) == NULL
, чтобы определить, действителен ли PID или нет? Я не смог найти документацию, в которой указано, что возвращает find_task_by_vpid(pid)
, когда pid
недействительно.
SYSCALL_DEFINE2(set_wrr_weight, pid_t, pid, int, weight){
struct sched_wrr_entity *wrr_se;
// I want to do a check here to see if given pid is valid or not
wrr_se = &find_task_by_vpid(pid)->wrr;
wrr_se->wrr_weight = weight;
return 0;
}