Linux: использование «clone3» и «waitid»Linux

Ответить
Anonymous
 Linux: использование «clone3» и «waitid»

Сообщение Anonymous »


Я пытаюсь узнать о процессах разветвления/клонирования с помощью системного вызова «clone3». Я прочитал страницы руководства, чтобы понять это. Помимо страниц руководства, мне удалось найти только ОДИН пример его использования в Интернете (в Интернете), и он, похоже, не работает. Кроме того, в примере используется функция libc «waitpid» вместо системного вызова «waitid», который я хочу использовать. В заключение я изменил пример, «преобразовав» его в следующий код:

#ifndef _GNU_SOURCE #define _GNU_SOURCE 1 #endif #include #include #include #include #include #include #include #include #include #ifndef CLONE_PIDFD #define CLONE_PIDFD 0x00001000 #endif #ifndef __NR_clone3 #define __NR_clone3 -1 структура clone_args { флаги __aligned_u64; __aligned_u64 pidfd; __aligned_u64 child_tid; __aligned_u64 родитель_тид; __aligned_u64 выход_сигнал; стек __aligned_u64; __aligned_u64 stack_size; __aligned_u64 тлс; }; #endif static pid_t sys_clone3(struct clone_args *args) { return syscall(__NR_clone3, args, sizeof(struct clone_args)); } статический int sys_waitid( тип idtype_t, идентификатор id_t, информация siginfo_t*, использование структуры rusage*, параметры int) { вернуть системный вызов (247, тип, идентификатор, информация, использование, параметры); } целое значение = 10; int main(int argc, char *argv[]) { struct clone_args args = { .флаги = CLONE_VM, .exit_signal = SIGCHLD, }; int pid = sys_clone3(&args); если (пид
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»