【发布时间】:2020-04-14 00:36:25
【问题描述】:
我的目标是编写一个系统调用来查找从正在进行的进程的开始时间经过的时间。我正在研究仍然试图理解。首先我尝试了下面的代码,但它返回 -1,我不确定这是跟踪进程的正确方法。
asmlinkage int sys_deneme(pid_t pid)
{
struct task_struct *task;
struct tms *tms;
int returnValue = 0;
//Is this correct to find a specific process?
//The code returns -1. Why it never enters if part?
for_each_process(task){
if((int)task->pid == pid){
times(tms);
returnValue = returnValue + (int) tms->tms_utime +(int) tms->tms_stime+(int)tms->tms_cutime+(int)tms->tms_cstime;
return returnValue;
}
else{
return -1;
}
}
}
然后我决定使用proc/pid/stat中的数据,但是我不知道如何读取给定pid的开始时间并返回。
asmlinkage int sys_deneme(pid_t pid)
{
struct task_struct *task;
struct tms *tms;
int returnValue = 0;
struct kstat *stat;
for_each_process(task){
if((int)task->pid == pid){
returnValue = (int)stat->btime->tv_sec;
return returnValue;
}
else{
return -1;
}
}
}
编辑
根据建议和研究,我已经成功传递了参数pid然后打印了pid和name。现在正在尝试查找开始时间/经过时间。
{
struct task_struct *task;
task = pid_task(find_vpid(pid),PIDTYPE_PID);
printk(KERN_INFO "pid %d \n",pid);
printk(KERN_INFO "Name: %s\n",task->comm);
}
【问题讨论】:
-
这能回答你的问题吗? Age of a process in the linux kernel
-
可能。 task_struct 似乎很合适。感谢你的回复。我写的两个代码都返回-1。我无法使用参数 pid 找到所需的进程。
-
不是 C 问题,但希望能有所启发:stackoverflow.com/questions/5731234/…
-
"我无法使用参数 pid 找到所需的进程。" - 只是谷歌。例如。 stackoverflow.com/questions/29451920/…
-
感谢您的回复。但我应该找到一种内核级别的方法来查找经过时间/开始时间等。
标签: c linux linux-kernel task system-calls