GNU bug report logs -
#68800
Guix waits for termination of a kernel thread
Previous Next
Reported by: Tomas Volf <~@wolfsden.cz>
Date: Mon, 29 Jan 2024 17:35:02 UTC
Severity: important
Done: Ludovic Courtès <ludo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #15 received at 68800-done <at> debbugs.gnu.org (full text, mbox):
Hi Tomas,
Tomas Volf <~@wolfsden.cz> skribis:
>> What about this method (from shepherd)?
>>
>> --8<---------------cut here---------------start------------->8---
>> (define (linux-process-flags pid)
>> "Return the process flags of @var{pid} (or'd @code{PF_} constants), assuming
>> the Linux /proc file system is mounted; raise a @code{system-error} exception
>> otherwise."
>> (call-with-input-file (string-append "/proc/" (number->string pid)
>> "/stat")
>> (lambda (port)
>> (define line
>> (get-string-all port))
>>
>> ;; Parse like systemd's 'is_kernel_thread' function.
>> (let ((offset (string-index line #\)))) ;offset past 'tcomm' field
>> (match (and offset
>> (string-tokenize (string-drop line (+ offset 1))))
>> ((state ppid pgrp sid tty-nr tty-pgrp flags . _)
>> (or (string->number flags) 0))
>> (_
>> 0))))))
>>
>> ;; Per-process flag defined in <linux/sched.h>.
>> (define PF_KTHREAD #x00200000) ;I am a kernel thread
>>
>> (define (linux-kernel-thread? pid)
>> "Return true if @var{pid} is a Linux kernel thread."
>> (= PF_KTHREAD (logand (linux-process-flags pid) PF_KTHREAD)))
>> --8<---------------cut here---------------end--------------->8---
>>
>> If it works better, we can use that in syscalls.scm as well.
>
> Yes, that does seem to work:
Pushed as 34c79c6ae8103ebae9ce08c81a9220a6b82b05f6.
Thank you!
Ludo’.
This bug report was last modified 1 year and 91 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.