【OS学习笔记】
操作系统老师和操作系统实践老师都讲的太好了!耐心且细致!
IO
为什么不把当前目录放入PATH环境变量
例如如果PATH变量为:.:./bin:./user/bin
是为了提高安全性,如果是这样的话执行ls
命令就会执行当前路径上的ls
而不是系统展示文件列表的ls
命令,这样如果把一个恶意程序命名为ls
系统就会执行恶意程序
进程
创建两个进程,并不是两个返回值,而是父进程和子进程各自的返回值
pit_t pid;
pid = fork();
if(pid == 0) //子进程
{
printf("child pid:%d\n",pid);
child();
}
else
{
printf("parent pid:%d\n",pid);
parent();
}
打印结果:
可以这样理解:
当创建子进程时,子进程从fork返回处开始执行,对于子进程来说并没有执行fork()
函数,又要从返回值处开始执行,os规定给了一个0作为返回值,父进程执行fork()
函数,返回值为子进程的pid。所以输出两次的pid并不是函数fork()
的两个返回值。
子进程和父进程同时运行,可能打印出来子进程的getppid的返回值为1
因为当子进程和父进程同时运行时,如果父进程先运行完,父进程就结束了,子进程由init
进程(pid
为1)收养,此时子进程打印getppid()
的结果为1,
代码:
pid_t pid;
pid = fork();
if(pid == 0) //子进程
{
int x = 0; //拖延时间,使父进程先执行完
printf("In child process: pid = %d, mypid = %d, myppid = %d\n",pid,getpid(),getppid());
}
else
{
printf("In parent process:pid = %d, mypid = %d, myppid = %d\n",pid,getpid(),getppid());
}
结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下