日期:2014-05-16  浏览次数:20688 次

请教关于Linux下的进程管理
最近在L1nux下学习进程管理,遇到了一些问题,想在这里请教一下大家:

1.在/proc/<pid>/stat里有一个字段是sessi0n id,这个值和/proc/<pid>/sessi0nid里的值不一样,这是为什么?到底哪一个是正确的? 我在man proc里没有找到关于文件sessi0nid的解释;

2.如何能够判断一个进程是32或64 bit的?我查看了一些资料,似乎通过一些配置,32bit的程序在64bit平台上市可以运行起来的;

3.通过lsof -p,怎样可以判断哪些是进程动态加载的库?虽然通过文件名与路径可以判断,但是我觉得这样不是一个很稳妥的方式.我认为所有FD为mem,TYPE为REG的文件,就应该是动态库文件了,请问一下大家怎么觉得呢?

我刚接触Linux不久,可能问题比较幼稚.之前在网上搜索也没有找到期望的答案,很多搜索到的解释都比较笼统,所以在这里提问,希望大家能不吝赐教 ^.^

------解决方案--------------------

1、
/proc/%d/sessionid 这个确实是sessionid
对应内核函数
C/C++ code

static ssize_t proc_sessionid_read(struct file * file, char __user * buf,
                  size_t count, loff_t *ppos)
{
...
    length = scnprintf(tmpbuf, TMPBUFLEN, "%u",                [b]audit_get_sessionid(task));[/b]
...
}

------解决方案--------------------
1. 在我的机器上,以当前的终端打开的bash为例:
$ ps -eo sess,pid,fname | grep bash
30789 30789 bash
所以bash的session id和pid都为30789;
2. 查看sessionid
$cat /proc/30789/sessionid
2
这个2不知道是什么意思?查看/proc/30789/stat中的确实是session id,这个sessionid的文件保存的不知道是什么。