linux进程管理之可执行文件的加载和运行,非常详细,有志于内核分析和开发的人可以看看!

linux进程管理之可执行文件的加载和运行(一)

三:可执行文件的加载和运行

Execve系统调用可以调用一个可执行文件完全代替当前的进程,它在libc中的封装有几个API: int execl(const charp a t* h n a m e, const char a* rg 0, ... /* (char *) 0 */);

int execv(const charp a t* h n a m e, char *consta rgv [] );

int execle(const charp a t* h n a m e, const char a* rg 0, ...

/* (char *)0, char *cones nt v p [] */);

int execve(const charp a t* h n a m e, char *consta rgv [], char *consten vp [] );

int execlp(const charf i l e* n a m e, const char a* rg 0, ... /* (char *) 0 */);

int execvp(const charf i l e* n a m e, char *consta rgv [] );

我们深入内核代码来研究一下可执行文件的加载过程.execve()系统调用的入口是sys_execve().代码如下:

asmlinkage int sys_execve(struct pt_regs regs)

{

int error; char * filename; //将用户空间的第一个参数(也就是可执行文件的路径)复制到内核 filename = getname((char __user *) regs.ebx); error = PTR_ERR(filename); if (IS_ERR(filename)) goto out; error = do_execve(filename, (char __user * __user *) regs.ecx, (char __user * __user *) regs.edx, &regs); if (error == 0) { task_lock(current); current->ptrace &= ~PT_DTRACE; task_unlock(current); /* Make sure we don't return using sysenter.. */ set_thread_flag(TIF_IRET); } //释放内存 putname(filename);

out:

return error;

}

系统调用的时候,把参数依次放在:ebx,ecx,edx,esi,edi,ebp寄存器.详情请参阅本站<< Linux中断处理之系统调用>>.第一个参数为可执行文件路径,第二个参数为参数的个数,第三个参数为可执行文件对应的参数. do_execve()是这个系统调用的核心,它的代码如下:

int do_execve(char * filename,

{

char __user *__user *argv, char __user *__user *envp, struct pt_regs * regs) //linux_binprm:保存可执行文件的一些参数

linux进程加载和运行,linux进程管理之可执行文件的加载和运行相关推荐

  1. linux mysql 进程查看工具_linux查看正在运行的进程(如何在Linux中查看所有正在运行的进程)...

    如何在Linux中查看所有正在运行的进程 名称:ps 使用权限:所有使用者 使用方式:ps [options] [--help] 说明:显示瞬间行程 (process) 的动态 参数:ps的参数非常多 ...

  2. linux暂停进程运行的按键组合是,Linux基础命令(五):进程——ps、top、jobs、bg、fg、kill、killall、shutdown...

    目录 进程 查看进程 用 top 命令动态查看进程(相当于任务管理器) 中断进程 把进程放置到后台执行 进程返回到前台执行 (暂时)停止进程 信号 通过kill命令给进程发送信号 通过 killall ...

  3. vs2017附加linux进程,使用调试器附加到运行的进程 - Visual Studio | Microsoft Docs

    使用 Visual Studio 调试器附加到正在运行的进程Attach to running processes with the Visual Studio debugger 06/12/2020 ...

  4. linux系统中如何关闭后台运行的进程

    在linux系统中,关闭某个进程的命令是kill,后边需要加进程的进程号. 但是关闭进程需要知道进程的进程号,那么怎样才能知道进程的进程号呢?可以使用下面的命令来查看. ps aux 执行了这个命令之 ...

  5. Linux中查看所有正在运行的进程

    你可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息.ps命令能提供一份当前进程的快照.如果你想状态可以自动刷新,可 ...

  6. linux查询python的进程树_如何在Linux中查看所有正在运行的进程

    你可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息.ps命令能提供一份当前进程的快照.如果你想状态可以自动刷新,可 ...

  7. 如何在Linux中查看所有正在运行的进程

    你可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息.ps命令能提供一份当前进程的快照.如果你想状态可以自动刷新,可 ...

  8. 通过python实现linux切换用户_Python实现在Linux系统下更改当前进程运行用户

    在上一篇文章中,我们讲了如何在linux上用python写一个守护进程.主要原理是利用linux的fork函数来创建一个进程,然后退出父进程运行,生成的子进程就会成为一个守护进程.细心观察的可能会发现 ...

  9. 在Linux中查看所有正在运行的进程

    可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息. ps命令能提供一份当前进程的快照.如果想状态可以自动刷新,可以 ...

  10. linux 运行c b停止,以下Linux命令中,用于终止某个进程的命令是()。A.deadB.killC.quitD.exit...

    以下Linux命令中,用于终止某个进程的命令是().A.deadB.killC.quitD.exit 更多相关问题 The substance does not dissolve in water _ ...

最新文章

  1. VXLAN和GRE的区别
  2. 鼠标移到某一行 某一行变色 鼠标移开恢复
  3. VTK:图表之MinimumSpanningTree
  4. matlab中方波信号的谐波表示
  5. 高效的企业测试-工作流和代码质量(4/6)
  6. 【C++】int与string转换
  7. vue组件化通信之兄弟组件传值
  8. mysql+使用swap_MySQL避免使用SWAP
  9. 有向有权图的电阻------给你出道题
  10. 数据挖掘 numpy进阶之技巧和提示
  11. Vim 编辑器底端 [noeol], [dos] 的含义
  12. scrapy tool 命令
  13. 大数据hadoop组件下载、windows环境搭建、官方文档查看详细步骤
  14. 网站实现支付宝第三方登陆详解
  15. Staking来袭,10亿级市场打开! | 火星总编时刻NO.31
  16. 回顾 | 女性 AI 专场 - 女性眼中的 ChatGPT
  17. 华为nova8和小米10青春版哪个好
  18. 简单计算器(Java实训)
  19. 基于Python的岭回归与LASSO回归模型介绍及实践
  20. softlayer iso_使用SoftLayer创建安全的WordPress博客

热门文章

  1. python实现自动打电话软件_python拨打电话
  2. mysql获取当前时间示范,mysql 实时显示当前运行的sql语句
  3. windows安装python3步骤_windows下python3第三方库安装方法总结
  4. 手机远程服务器总说磁盘空间不足,查询远程服务器上磁盘空间的最佳方式
  5. 打开SQlite数据库
  6. LeetCode 981.基于时间的键值存储(C++)
  7. StylesheetLanguage--如何使用Less--前端样式语言
  8. Android项目实战之高仿网易云音乐创建项目和配置
  9. PowerShell 使用当前日期创建文件夹
  10. Java 8 你需要掌握的新特性