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.