Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux内核(内核空间)中检索会话Id_Linux_Linux Kernel_Kernel_Sessionid - Fatal编程技术网

在linux内核(内核空间)中检索会话Id

在linux内核(内核空间)中检索会话Id,linux,linux-kernel,kernel,sessionid,Linux,Linux Kernel,Kernel,Sessionid,我想在linux内核(内核空间)中检索当前进程的sessionid。我看到task\u struct有一个字段sessionid,但它只有在宏CONFIG\u AUDITSYSCALL打开时才定义。所以我试着用这个宏构建内核,但仍然没有得到结果。我还尝试使用audit\u get\u sessionid(当前)上的CONFIG\u AUDITSYSCALL从函数中获取其值,但得到的是-1或垃圾值(不同于用户空间中的getsid(0)方法) 我在这一点上感到震惊。任何建议都会有很大帮助。您可以在此

我想在linux内核(内核空间)中检索当前进程的sessionid。我看到
task\u struct
有一个字段
sessionid
,但它只有在宏
CONFIG\u AUDITSYSCALL
打开时才定义。所以我试着用这个宏构建内核,但仍然没有得到结果。我还尝试使用
audit\u get\u sessionid(当前)
上的
CONFIG\u AUDITSYSCALL
从函数中获取其值,但得到的是-1或垃圾值(不同于用户空间中的
getsid(0)
方法)


我在这一点上感到震惊。任何建议都会有很大帮助。

您可以在此处查看
getsid
syscall:


这表明您可以使用内核函数task_session()来获取会话id。

pid_vnr(task_session(current));我会做你想做的

非常感谢库巴的及时回复。我尝试使用您提到的方法,但是对于用户空间中的getsid(0)和内核空间中的task_会话(current),我得到了不同的结果。值是:15422(使用getsid(0)):3473445976(使用task_session(current)),我刚刚计算出来:pid_vnr(task_session(current));将返回当前会话的id。感谢Kuba…@sebe,您正在编写内核代码,这让我很害怕,并且没有注意到示例代码中的
sid
是指针。这似乎是在提问者在评论中将其报告为解决方案数小时后发布的。
SYSCALL_DEFINE1(getsid, pid_t, pid)
{
     struct task_struct *p;
     struct pid *sid;
     int retval;

     rcu_read_lock();
     if (!pid)
             sid = task_session(current);
     else {
     ...