在linux命令中reboot是从新启动,shutdown -r now是当即中止而后从新启动,都说他们两个是同样的,实际上是有必定的区别的。
shutdown命令能够安全地关闭或重启Linux系统,它在系统关闭以前给系统上的全部登陆用户提示一条警告信息。该命令还容许用户指定一个时间参数,能够是一个精确的时间,也能够是从如今开始的一个时间段。
精确时间的格式是hh:mm,表示小时和分钟,时间段由+ 和分钟数表示。系统执行该命令后会自动进行数据同步的工做。
该命令的通常格式: shutdown [选项] [时间] [警告信息]
命令中各选项的含义为:
- k 并不真正关机而只是发出警告信息给全部用户
- r 关机后当即从新启动
- h 关机后不从新启动
- f 快速关机重启动时跳过fsck
- n 快速关机不通过init 程序
- c 取消一个已经运行的shutdown
须要特别说明的是该命令只能由超级用户使用。
例1,系统在十分钟后关机而且立刻从新启动: # shutdown –r +10
例2,系统立刻关机而且不从新启动:# shutdown –h now
halt是最简单的关机命令,其其实是调用shutdown -h命令。halt执行时,杀死应用进程,文件系统写操做完成后就会中止内核。
halt命令的部分参数以下:
[-f] 没有调用shutdown而强制关机或重启
[-i] 关机或从新启动以前,关掉全部的网络接口
[-p] 关机时调用poweroff,此选项为缺省选项html
reboot的工做过程与halt相似,其做用是从新启动,而halt是关机。其参数也与halt相似。reboot命令重启动系统时是删除全部的进程,而不是平稳地终止它们。所以,使用reboot命令能够快速地关闭系统,但若是还有其它用户在该系统上工做时,就会引发数据的丢失。因此使用reboot命令的场合主要是在单用户模式。
init是全部进程的祖先,其进程号始终为1。init用于切换系统的运行级别,切换的工做是当即完成的。init 0命令用于当即将系统运行级别切换为0,即关机;init 6命令用于将系统运行级别切换为6,即从新启动。linux
代码段:代码段是用来存放可执行文件的操做指令,也就是说是它是可执行程序在内存中的镜像。代码段须要防止在运行时被非法修改,因此只准许读取操做,而不容许写入(修改)操做—它是不可写的。
数据段:数据段用来存放可执行文件中已初始化全局变量,换句话说就是存放程序静态分配的变量和全局变量。
BSS段:BSS段包含了程序中未初始化的全局变量,在内存中bss段所有置零。
堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。
栈:栈是用户存放程序临时建立的局部变量,也就是说咱们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此之外,在函数被调用时,其参数也会被压入发起调用的进程栈中,而且待到调用结束后,函数的返回值也会被存放回栈中。因为栈的先进后出特色,因此栈特别方便用来保存/恢复调用现场。从这个意义上讲,咱们能够把堆栈当作一个寄存、交换临时数据的内存区。面试
为了更加安全的存储文件,Linux为不一样的文件赋予了不一样的权限,每一个文件都拥有下面三种权限:
● 全部者权限:文件全部者可以进行的操做。
● 组权限:文件所属用户组可以进行的操做。
● 外部权限(其余权限):其余用户能够进行的操做。
查看文件权限:
ls -l 命令能够查看与文件权限相关的信息:算法
$ls -l /home/amrood -rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
第一列就包含了文件或目录的权限。 安全
第一列的字符能够分为三组,每一组有三个,每一个字符都表明不一样的权限,分别为读取(r)、写入(w)和执行(x):
· 第一组字符(2-4)表示文件全部者的权限,-rwxr-xr-- 表示全部者拥有读取(r)、写入(w)和执行(x)的权限。
· 第二组字符(5-7)表示文件所属用户组的权限,-rwxr-xr-- 表示该组拥有读取(r)和执行(x)的权限,但没有写入权限。
· 第三组字符(8-10)表示全部其余用户的权限,rwxr-xr-- 表示其余用户只能读取(r)文件。
文件访问模式:
文件权限是Linux系统的第一道安全防线,基本的权限有读取(r)、写入(w)和执行(x):
· 读取:用户可以读取文件信息,查看文件内容。
· 写入:用户能够编辑文件,能够向文件写入内容,也能够删除文件内容。
· 执行:用户能够将文件做为程序来运行。
目录访问模式:
目录的访问模式和文件相似,可是稍有不一样:
· 读取:用户能够查看目录中的文件
· 写入:用户能够在当前目录中删除文件或建立文件
· 执行:执行权限赋予用户遍历目录的权利,例如执行 cd 和 ls 命令。网络
改变权限:
chmod (change mode) 命令来改变文件或目录的访问权限,权限可使用符号或数字来表示。
使用符号表示权限:
能够增长(+)和删除(-)权限,也能够指定特定权限。
符号说明:
+ 为文件或目录增长权限
- 删除文件或目录的权限
= 设置指定的权限
下面的例子将会修改testfile文件的权限:函数
$ls -l testfile -rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile $chmod o+wx testfile $ls -l testfile -rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile $chmod u-x testfile $ls -l testfile -rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile $chmod g=rx testfile $ls -l testfile -rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
也能够同时使用多个符号:spa
$chmod o+wx,u-x,g=rx testfile $ls -l testfile -rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
使用数字表示权限:
除了符号,也可使用八进制数字来指定具体权限,以下表所示:
数字权限说明:
0 没有任何权限 ---
1 执行权限 --x
2 写入权限 -w-
3 执行权限和写入权限:1 (执行) + 2 (写入) = 3 -wx
4 读取权限 r--
5 读取和执行权限:4 (读取) + 1 (执行) = 5 r-x
6 读取和写入权限:4 (读取) + 2 (写入) = 6 rw-
7 全部权限: 4 (读取) + 2 (写入) + 1 (执行) = 7 rwx设计
下面的例子,首先使用 ls -1 命令查看testfile文件的权限,而后使用chmod命令更改权限:htm
$ls -l testfile -rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile $ chmod 755 testfile $ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile $ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile $ls -l testfile ----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
更改全部者和用户组:
在Linux中,每添加一个新用户,就会为它分配一个用户ID和群组ID,上面提到的文件权限也是基于用户和群组来分配的。
有两个命令能够改变文件的全部者或群组:
· chown :chown 命令是"change owner"的缩写,用来改变文件的全部者。
· chgrp :chgrp 命令是"change group"的缩写,用来改变文件所在的群组。
chown 命令用来更改文件全部者,其语法以下:
$ chown user filelist
user 能够是用户名或用户ID,例如
$ chown amrood testfile
$ 将testfile文件的全部者改成amrood。
注意:超级用户 root 能够不受限制的更改文件的全部者和用户组,可是普通用户只能更改全部者是本身的文件或目录。
chgrp 命令用来改变文件所属群组,其语法为:
$ chgrp group filelist
group 能够是群组名或群组ID,例如
$ chgrp special testfile
$ 将文件 testfile 的群组改成 special。
产生死锁的缘由主要是:
(1) 由于系统资源不足。
(2) 进程运行推动的顺序不合适。
(3) 资源分配不当等。
若是系统资源充足,进程的资源请求都可以获得知足,死锁出现的可能性就很低,不然就会因争夺有限的资源而陷入死锁。其次,进程运行推动顺序与速度不一样,也可能产生死锁。
产生死锁的四个必要条件:
(1) 互斥条件:一个资源每次只能被一个进程使用。
(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已得到的资源保持不放。
(3) 不剥夺条件:进程已得到的资源,在未使用完以前,不能强行剥夺。
(4) 循环等待条件:若干进程之间造成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件 ,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不知足,就不会发生死锁。
死锁的解除与预防:
理解了死锁的缘由,尤为是产生死锁的四个必要条件,就能够最大可能地避免、预防和解除死锁。因此,在系统设计、进程调度等方面注意如何不让这四个必要条件成立,如何肯定资源的合理分配算法,避免进程永久占据系统资源。此外,也要防止进程在处于等待状态的状况下占用资源。所以,对资源的分配要给予合理的规划。
不算main这个进程自身,到底建立了多少个进程啊?
int main(int argc, char* argv[]) { fork(); fork() && fork() || fork(); fork(); }
(1) A&&B||C
A为假,跳过B,判断C;
A为真,判断B,若B为真,跳过C;
若B为假,判断C.
(2) fork()函数父进程返回子进程ID;子进程返回0
第一条语句新增1个;
第二条语句新增4*2个;
第三条语句,此时已有进程1+1+4*2个,因此新增10个.
总数为2*(2+1+2)*2=20;减去本身就是19.