权限!权限!权限!
没有权限,一些资源你是没办法使用的。在Linux中cat filename,结果屏幕显示了filename的内容,为什么你能看见,而我不能?权限。与UID/GID有关,与文件的属性有关,同时与process进程也有关。
在Linux上敲一个命令,实质上是一些二进制文件在执行,也可以说是程序,而二进制文件在运行时,都会产生一个进程,操作系统就是通过进程来管理访问资源,达到效果。
1、进程是如何产生的?有哪些关键要素?
在用户cat命令时,触发事件,则将硬盘内的cat二进制文件加载到内存,同时将用户权限属性参数(如UID/GID)加载到内存,将用户需要打开的文件filename数据加载到内存(这里不知道是不是理解有误),这时候还会产生唯一pid(process ID),到这里一个进程概括的要素就齐全了,然后操作系统根据pid来实现资源访问,这里又涉及UID、GID、EUID、EGID。。。
2、子进程与父进程
进程A在执行某项任务时(快递),基本都会衍生出来另一个进程B,进程A让它衍生出来的进程B来处理搬运任务,然后进程A再衍生一个进程C来出来分拣任务。。。。这里的B和C都是衍生出来的进程,成为子进程,而A就是它们的父进程
那么这之间的父进程产生子进程的一个部分过程(fork-and-exec过程调用)是这样:
进程会通过父进程以复制(fork)的方式产生一个一模一样的子进程(暂存进程),暂存进程与父进程的区别就是PID不同,同时会多个PPID参数(父进程PID),然后暂存进程开始以exec的方式加载实际要执行的程序。
到这里返回来推理,用户test login Linux会获取一个bash,也就是一个PID;用户test2 login Linux也会获取一个bash,另一个PID,test在bash运行的命令都是test bash的子进程,同理test2也是一样的,这不就是多用户、多任务(多任务是因为CPU可以处理很多条工作)环境吗
一个案例:
如果我在Linux下以命令行界面登录,在屏幕当中显示错误信息后就挂掉了,动都不能动,该如何是好?这时候你可以随意按alt + F1~F7来切换到其他终端接口,然后以ps aux找到刚才的错误进程,然后杀掉,回到刚才的终端接口,就又恢复了。
3、工作管理(job control)
jobs只能管理当前的bash,无法有tty1的环境管理tty2的bash
1>、 直接将命令丢到后台中“执行”的&
& 直接让cp命令在后台执行,当然这里会很快就终结cp的pid
Done说明上一次命令cp后台执行结束了的反馈。[2] 表示job number工作号码,后面的4465是dd命令的pid,jobs -l可以查看到当前bash后台工作执行的命令
&后台工作时,如果出现stdout以及stderr时,数据依然会反馈到屏幕上,这样会导致屏幕花,所以可以使用重定向将数据流导入到固定的/tmp/log.txt文件中
2>、 将目前的工作丢到后台中“暂停”: ctrl + z
Linux有些命令是交互式命令,无法通过&放入后台,可以通过ctrl + z暂时将交互式命令放入后台暂停,然后在从后台提取到前台来处理。
ctrl + z将vim命令放入后台暂停中
3>、 fg将后台工作拿到前台来出来
这里的1表示job number,指定工作号码为1的工作提取到前台来
4>、 让工作在后台下的状态变成为运行中:bg
bg与fg格式一样, bg %3.。。。。
5>、也可以通过kill将在后台或者前台的命令杀掉
kill -15 pid
END
手机扫一扫
移动阅读更方便
你可能感兴趣的文章