linux进程加载和运行,linux进程管理之可执行文件的加载和运行
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, ®s); 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进程管理之可执行文件的加载和运行相关推荐
- linux mysql 进程查看工具_linux查看正在运行的进程(如何在Linux中查看所有正在运行的进程)...
如何在Linux中查看所有正在运行的进程 名称:ps 使用权限:所有使用者 使用方式:ps [options] [--help] 说明:显示瞬间行程 (process) 的动态 参数:ps的参数非常多 ...
- linux暂停进程运行的按键组合是,Linux基础命令(五):进程——ps、top、jobs、bg、fg、kill、killall、shutdown...
目录 进程 查看进程 用 top 命令动态查看进程(相当于任务管理器) 中断进程 把进程放置到后台执行 进程返回到前台执行 (暂时)停止进程 信号 通过kill命令给进程发送信号 通过 killall ...
- vs2017附加linux进程,使用调试器附加到运行的进程 - Visual Studio | Microsoft Docs
使用 Visual Studio 调试器附加到正在运行的进程Attach to running processes with the Visual Studio debugger 06/12/2020 ...
- linux系统中如何关闭后台运行的进程
在linux系统中,关闭某个进程的命令是kill,后边需要加进程的进程号. 但是关闭进程需要知道进程的进程号,那么怎样才能知道进程的进程号呢?可以使用下面的命令来查看. ps aux 执行了这个命令之 ...
- Linux中查看所有正在运行的进程
你可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息.ps命令能提供一份当前进程的快照.如果你想状态可以自动刷新,可 ...
- linux查询python的进程树_如何在Linux中查看所有正在运行的进程
你可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息.ps命令能提供一份当前进程的快照.如果你想状态可以自动刷新,可 ...
- 如何在Linux中查看所有正在运行的进程
你可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息.ps命令能提供一份当前进程的快照.如果你想状态可以自动刷新,可 ...
- 通过python实现linux切换用户_Python实现在Linux系统下更改当前进程运行用户
在上一篇文章中,我们讲了如何在linux上用python写一个守护进程.主要原理是利用linux的fork函数来创建一个进程,然后退出父进程运行,生成的子进程就会成为一个守护进程.细心观察的可能会发现 ...
- 在Linux中查看所有正在运行的进程
可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息. ps命令能提供一份当前进程的快照.如果想状态可以自动刷新,可以 ...
- linux 运行c b停止,以下Linux命令中,用于终止某个进程的命令是()。A.deadB.killC.quitD.exit...
以下Linux命令中,用于终止某个进程的命令是().A.deadB.killC.quitD.exit 更多相关问题 The substance does not dissolve in water _ ...
最新文章
- VXLAN和GRE的区别
- 鼠标移到某一行 某一行变色 鼠标移开恢复
- VTK:图表之MinimumSpanningTree
- matlab中方波信号的谐波表示
- 高效的企业测试-工作流和代码质量(4/6)
- 【C++】int与string转换
- vue组件化通信之兄弟组件传值
- mysql+使用swap_MySQL避免使用SWAP
- 有向有权图的电阻------给你出道题
- 数据挖掘 numpy进阶之技巧和提示
- Vim 编辑器底端 [noeol], [dos] 的含义
- scrapy tool 命令
- 大数据hadoop组件下载、windows环境搭建、官方文档查看详细步骤
- 网站实现支付宝第三方登陆详解
- Staking来袭,10亿级市场打开! | 火星总编时刻NO.31
- 回顾 | 女性 AI 专场 - 女性眼中的 ChatGPT
- 华为nova8和小米10青春版哪个好
- 简单计算器(Java实训)
- 基于Python的岭回归与LASSO回归模型介绍及实践
- softlayer iso_使用SoftLayer创建安全的WordPress博客
热门文章
- python实现自动打电话软件_python拨打电话
- mysql获取当前时间示范,mysql 实时显示当前运行的sql语句
- windows安装python3步骤_windows下python3第三方库安装方法总结
- 手机远程服务器总说磁盘空间不足,查询远程服务器上磁盘空间的最佳方式
- 打开SQlite数据库
- LeetCode 981.基于时间的键值存储(C++)
- StylesheetLanguage--如何使用Less--前端样式语言
- Android项目实战之高仿网易云音乐创建项目和配置
- PowerShell 使用当前日期创建文件夹
- Java 8 你需要掌握的新特性