On 2018-12-25, Lai Jiangshan <jiangshanlai+lkml@xxxxxxxxx> wrote: > On Tue, Dec 25, 2018 at 1:32 PM Lai Jiangshan > <jiangshanlai+lkml@xxxxxxxxx> wrote: > > > > Is it possible to avoid adding any syscall? > > > > Since holding /proc/pid/reg_file can also hold the pid. > > With this guarantee, /proc/pid/uuid (universally unique identifier ) can be > > introduced to identify tasks, the kernel generates > > a uuid for every task when created. > > > > save_pid_uuid_pair_for_later_kill(int pid) { > > /* save via /proc/$pid/uuid */ > > /* don't need to keep any fd after save */ > > } > > > > safe_kill(pid, uuid, sig) { > > fd = open(/proc/$pid/uuid); /* also hold the pid until close() if > > open() successes */ > > if (open successes and read uuid from fd and if it equals to uuid) > > kill(pid, sig) > > close(fd) > > } > > > > All things needed to be done is to implement /proc/pid/uuid. And if pid can't > > be recycled within 1 ticket, or the user can ensure it. The user can use > > starttime(in /proc/pid/stat) instead. > > > > save_pid_starttime_pair_for_later_kill(int pid) { > > /* save via /proc/$pid/stat */ > > /* don't need to keep any fd after save or keep it for 1 ticket at most */ > > } > > > > safe_kill(pid, starttime, sig) { > > fd = open(/proc/$pid/stat); /* also hold the pid until close() if > > open() successes */ > > if (open successes and read starttime from fd and if it equals to starttime) > > kill(pid, sig) > > close(fd) > > } > > > > In this case, zero LOC is added in the kernel. All of it depends on > > the guarantee that holding /proc/pid/reg_file also holds the pid, > > one of which I haven't checked carefully either. > > > > Oh, Sorry, I was wrong, the pid isn't reserved even when > the fd is kept in the user space. And I'm sorry that I had > replied to an "old" email thread. Don't worry, this was a common point of confusion during this (and sister) threads. All the fd ensures is that access through that fd will give you -ESRCH if the process is gone (and if the PID is reused it will still give you -ESRCH). -- Aleksa Sarai Senior Software Engineer (Containers) SUSE Linux GmbH <https://www.cyphar.com/>
Attachment:
signature.asc
Description: PGP signature