Attach my own pid
From: Nitin Varyani <hidden>
Date: 2016-03-27 11:31:03
rather this will also suffice
if (* pid == NULL*) {
retval = -ENOMEM;
pid = alloc_pid(p->nsproxy->pid_ns);
if (!pid)
goto bad_fork_cleanup_io;
}
p->pid = pid_nr(pid);
On Sun, Mar 27, 2016 at 4:57 PM, Nitin Varyani [off-list ref]
wrote:
If I do the following thing: struct pid remote_struct_pid; remote_struct_pid.numbers[0].nr=*my_pid*; p = copy_process(clone_flags, stack_start, stack_size, child_tidptr, *remote_struct_pid*, trace, tls); and modify the copy_process function little bit (marked in BOLD), it may serve my objective. if (pid != &init_struct_pid *&& pid == NULL*) { retval = -ENOMEM; pid = alloc_pid(p->nsproxy->pid_ns); if (!pid) goto bad_fork_cleanup_io; } p->pid = pid_nr(pid); The pids by kernel are allocated in the range (RESERVED_PIDS, PID_MAX_DEFAULT) and I will choose *my_pid* outside this range. I will have to modify system calls/kernel to cater to such processes. On Tue, Mar 22, 2016 at 3:55 PM, Bernd Petrovitsch < bernd at petrovitsch.priv.at> wrote:quoted
On Die, 2016-03-22 at 01:26 -0400, Valdis.Kletnieks at vt.edu wrote:quoted
On Mon, 21 Mar 2016 16:01:41 +0530, Nitin Varyani said:quoted
I am running a master user-level process at Computer 1 which sends a process context like code, data, registers, PC, etc as well as*"pid"* toquoted
quoted
slave processes running at other computers. The responsibility of theslavequoted
quoted
process is to fork a new process on order of master process andattach *"pid"quoted
quoted
*given by the master to the new process it has forked. Any systemcall onquoted
quoted
slave nodes will have an initial check of " Whether the processbelongs toquoted
quoted
local node or to the master node?". That is, if kernel at Computer 2pid ofquoted
quoted
the process is 1500None of that requires actually controlling the PID of the child.Well, I think that the OP wants to map the PIDs with a fixed offset per host. So e.g. the local PID == 14 becomes 20014 on all other nodes. At least for debugging it's easier than some random mappings;-) As for top post: TTBOMK there is no SysCall for doing that. * Perhaps one can achieve something similar with containers - one container per remote host or so (but I never used containers actively myself) or (ab)use KVM (does vServer still live?) for local "pseudo-VMs" (and use there the original PIDs - or so). * The manual page of clone(2) doesn't reveal to me if it's possible to wish for a PID. * You could clone (pun not intended;-) the fork() syscall and add an parameter - the PID - to it (and e.g. return -1 if it's already used). BTW I don't know how the rest of the kernel reacts to such artifical PIDs (but you will see;-) outside the "official range". MfG, Bernd -- "What happens when you read some doc and either it doesn't answer your question or is demonstrably wrong? In Linux, you say "Linux sucks" and go read the code. In Windows/Oracle/etc you say "Windows sucks" and start banging your head against the wall." - Denis Vlasenko on lkml
-------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20160327/c09832e2/attachment-0001.html