Здравствуйте, ребята, мне нужна небольшая помощь здесь. После многих часов учебы и исследований я сдался, я не мог этого сделать. Я новичок в программировании ядра, и у меня есть эта задача. Меня попросят изменить код системного вызова exit(), чтобы он завершил все дочерние процессы процесса вызова, а затем завершил процесс. Насколько я знаю, системный вызов exit() дает дочерним элементам процесс init после завершения работы родителя. Я думал, что может прекратить каждые ребенок с помощью детей и идентификатора вызова:Изменение кода системного вызова exit.c
kill (child_pid, SIGTERM);
также я знаю, что мы можем получить доступ к призывающей процессу task_struct с помощью текущей глобальных переменного. Кто-нибудь знает, могу ли я получить все дети PID от текущей переменной? Есть ли другое решение, которое вы знаете?
ОБНОВЛЕНИЕ: Я нашел способ прохождения детей текущего процесса. Вот мой модифицированный код.
void do_exit(long code)
{
struct task_struct *tsk = current;
//code added by me
int nice=current->static_prio-120;
if(tsk->myFlag==1 && nice>10){
struct task_struct *task;
struct list_head *list;
list_for_each(list, ¤t->children) {
task = list_entry(list, struct task_struct, sibling);
//kill child
kill(task->pid,SIGKILL);
}
}
Будет ли это работать?
Я не получил это может у вас получить более ясно, пожалуйста? Я обновил свой вопрос, я нашел способ, как пересекать детей, но будет ли это работать? –
Я считаю, что в этом упражнении вы читаете фактический код (например, образцы, о которых я упоминал), и учитесь там, в отличие от образцов для игры в googling без правильного контекста. В частности, цикл, который вы добавили, неверен, поскольку он не блокирует tasklist_lock или что-то еще, гарантирующее стабильность списка. С kill (task-> pid, ..) вы берете pid и попросите func искать структуру задачи на основе pid. Сама задача, из которой вы взяли pid. Снова прочитайте код. –
И это не отвечало на мой вопрос. Дон просто дайте мне подсказку. У меня уже есть все намеки, которые мне нужны, но я не могу представить большую картину. Может ли кто-нибудь показать это мне и тому же мне какое-то драгоценное время? –