> spin_lock(&task_lock);
хмм.... может, tasklist_lock ? и к тому же read_lock().
> for(;;){
> ...
> if(pp == &init_task) break;
лучше for_each_process(pp)
> челу как-будто нужен юзерспейс а вы всё ядро да ядро
верно :) а я сразу ответы стал читать.
ничего кроме чтения /proc/ для этого еще не придумали.
Ok, есть еще способ:
int pid_max; // читаем из /proc/sys/kernel/pid_max
for (int pid = 1; pid < pid_max; ++pid)
if (kill(pid, 0) && errno == ESRCH)
play_with_process_found(pid);
хотел уже отправить... но ведь, блин, обязательно найдется
кто-то, кто вслух усомнится в эффективности такого подхода.
короче - шутка.
> по моемому эта штука потребует рутовых прав
нет, почему же? мы могли бы даже любой сигнал посылать
вместо 0, если бы не опасность погубить свои собственные
процессы. обратите внимание, мы проверяем на ESRCH (только
должно быть "!=", конечно).
иными словами, это в принципе работает под любым пользователем.