samples: make pidfd-metadata fail gracefully on older kernels
Initialize pidfd to an invalid descriptor, to fail gracefully on those kernels that do not implement CLONE_PIDFD and leave pidfd unchanged. Signed-off-by: Dmitry V. Levin <ldv@altlinux.org> Signed-off-by: Christian Brauner <christian@brauner.io>
This commit is contained in:
Родитель
9014143bab
Коммит
bee19cd8f2
|
@ -83,7 +83,7 @@ static int pidfd_metadata_fd(pid_t pid, int pidfd)
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int pidfd = 0, ret = EXIT_FAILURE;
|
int pidfd = -1, ret = EXIT_FAILURE;
|
||||||
char buf[4096] = { 0 };
|
char buf[4096] = { 0 };
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
int procfd, statusfd;
|
int procfd, statusfd;
|
||||||
|
@ -91,7 +91,11 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
pid = pidfd_clone(CLONE_PIDFD, &pidfd);
|
pid = pidfd_clone(CLONE_PIDFD, &pidfd);
|
||||||
if (pid < 0)
|
if (pid < 0)
|
||||||
exit(ret);
|
err(ret, "CLONE_PIDFD");
|
||||||
|
if (pidfd == -1) {
|
||||||
|
warnx("CLONE_PIDFD is not supported by the kernel");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
procfd = pidfd_metadata_fd(pid, pidfd);
|
procfd = pidfd_metadata_fd(pid, pidfd);
|
||||||
close(pidfd);
|
close(pidfd);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче