菜单

创立属于其他Session的历程

2019年2月9日 - LINUX

 
成立其余Session(User)的历程必要获得对应Session的Token作为CreateProcessAsUser的参数来启动进度。 

Sessions:A session is a collection of one or more process groups.

 
修改有System权限的Token的TokenId为其余Session的TokenId就足以在任何Session里面成立有System权限的进程了。

Sessions:是单个或多少个进程组的一个相会。

  相关的Blog: https://blog.csdn.net/highyyy/article/details/6129769

process establishes a new session by calling the setsid function.
进度靠调用setsid()创造一个对话。
#include <unistd.h>
pid_t setsid(void);

If the calling process is not a process group leader, this function
creates a new session. Three things happen
比方调用进度不是COO进度,函数setsid()会成立一个新的对话。起到三个成效:
  1.The process becomes the session leader of this new session. (A
session leader is the process that creates a session.) 
     调用经过成为新会话的the session
leader。A session leader 是成立会话的历程。
     The process is the only process in this new session.
     在新的对话中,调用进度是唯一的进程。
  2.The process becomes the process group leader of a new process group.
The new process group ID is the process ID of the calling process.
     调用经过成为新进度组的高管进程。新历程组ID就是调用进度的进度ID。
  3.The process has no controlling terminal. (We’ll discuss controlling
terminals in the next section.)   
     调用经过没有控制终端。
     If the process had a controlling terminal before calling setsid,
that association is broken.
     在调用setsid()以前,即使调用进程有控制终端,
那么调用进度会退出这一个决定终端。

 

This function returns an error if the caller is already a process group
leader. 

如若调用进程已经是一个总经理进程,则函数再次回到出错。
To ensure this is not the case, the usual practice is to call fork and
have the parent terminate and the child continue.
为了幸免这种现象发生,平日的做法是调用fork()使父进程终止,子进程继续运行。
We are guaranteed that the child is not a process group leader, because
the process group ID of the parent is inherited by the child,
俺们有限辅助了子进度不是CEO进度,因为父进程的进程组ID没有被子进度继续,
but the child gets a new process ID. Hence, it is impossible for the
child’s process ID to equal its inherited process group ID.
而子进度取得一个新进程ID。因而,子进度ID等于它继续的经过组ID是无法的。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图