Re: Attach my own pid

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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 <varyani.nitin1@xxxxxxxxx> 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@xxxxxxxxxxxxxxxxxxx> wrote:
On Die, 2016-03-22 at 01:26 -0400, Valdis.Kletnieks@xxxxxx wrote:
> On Mon, 21 Mar 2016 16:01:41 +0530, Nitin Varyani said:
>
> > 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"* to
> > slave processes running at other computers. The responsibility of the slave
> > process is to fork a new process on order of master process and attach *"pid"
> > *given by the master to the new process it has forked. Any system call on
> > slave nodes will have an initial check of " Whether the process belongs to
> > local node or to the master node?". That is, if kernel at Computer 2 pid of
> > the process is 1500
>
> None 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




_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux