查看进程

控制进程

进程之间关系

进程通信方式

信号

Kill

守护进程

一般进程都是通过命令终端输入启动然后前台或者后台执行,而守护进程是机器刚刚开机就自动启动的进程,同时守护进程在执行过程中会打印相应日志到指定目录中,除此之外守护进程存在与根目录下,不会导致磁盘或光盘等介质无法卸载。

nohup … &

使用nobup命令打开一个进程,与守护进程类似,在关闭终端后,仍然可以执行。也即 nohub 命令使进程忽略 hangup(挂起)信号—比如说关闭执行命令终端。

在一个终端下执行 tail 进程,另一个终端下查询进程
image.png

关闭第一个终端后,再次查看进程发现没有虚拟终端在运行
image.png
使用 nohub 和 &结合将 tail 命令进程在后台执行,并且不会受到关闭终端的影响,而且忽略输入将输出内容打印到当前目录的 nohup.out文件中
image.png

在另一个终端中发现该进程的父进程即终端进程结束后,变为 1,即孤儿进程被祖先进程收养
image.png

守护进程daemon

不需要终端的进程,与 nohup命令相比:父进程不是终端进程,而是祖先进程;输出不是终端而是指定日志目录;使用的目录切换为根目录,只有在重启时进程才可结束

进入系统自动创建的相应进程号目录,文件和目录显示进程信息
image.png

查看进程执行目录,为 /root目录,不能随便卸载
image.png

0表示标准输入,表示关闭 1、2表示标准输出
image.png

查看demon进程 sshd
image.png
sshd守护进程父进程为1,进入到该进程目录下,发现执行路径为根目录 /,标注输入为 关闭, 标准输出为 socket套接字,输出信息到 /var/log/sshd目录下。

nohup 和 守护进程运行的进程都可以脱离终端,避免关闭终端后,出现异常

screen

进行终端操作时,进入screen环境,即使终端关闭或者网络中断,再次打开后仍然可以继续执行

screen 进入screen环境
ctrl+a d 退出(detached)screen环境
screen -ls 查看screen会话
screen -r sessionid 恢复会话
exit 结束screen进程

安装并进入screen环境
image.pngimage.png

执行命令进程
image.png
ctrl + a d退出screen环境
image.png

查看保留session

image.png

恢复指定session环境
image.png
image.png

服务管理工具

服务,也就是守护进程,可以通过以下两种工具集中管理

service

Centos 6之前使用

  1. [root@centos7 ~]# cd /etc/init.d/
  2. [root@centos7 init.d]# cat network

以下是network的启停脚本

  1. #! /bin/bash
  2. #
  3. # network Bring up/down networking
  4. #
  5. # chkconfig: 2345 10 90
  6. # description: Activates/Deactivates all network interfaces configured to \
  7. # start at boot time.
  8. #
  9. ### BEGIN INIT INFO
  10. # Provides: $network
  11. # Should-Start: iptables ip6tables NetworkManager-wait-online NetworkManager $network-pre
  12. # Short-Description: Bring up/down networking
  13. # Description: Bring up/down networking
  14. ### END INIT INFO
  15. # Source function library.
  16. . /etc/init.d/functions
  17. if [ ! -f /etc/sysconfig/network ]; then
  18. exit 6
  19. fi
  20. . /etc/sysconfig/network
  21. if [ -f /etc/sysconfig/pcmcia ]; then
  22. . /etc/sysconfig/pcmcia
  23. fi
  24. # Check that networking is up.
  25. [ "${NETWORKING}" = "no" ] && exit 6
  26. # if the ip configuration utility isn't around we can't function.
  27. [ -x /sbin/ip ] || exit 1
  28. CWD=$(pwd)
  29. cd /etc/sysconfig/network-scripts
  30. . ./network-functions
  31. # find all the interfaces besides loopback.
  32. # ignore aliases, alternative configurations, and editor backup files
  33. interfaces=$(ls ifcfg-* | \
  34. LC_ALL=C sed -e "$__sed_discard_ignored_files" \
  35. -e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \
  36. -e '{ s/^ifcfg-//g;s/[0-9]/ &/}' | \
  37. LC_ALL=C sort -k 1,1 -k 2n | \
  38. LC_ALL=C sed 's/ //')
  39. rc=0
  40. # See how we were called.
  41. case "$1" in
  42. start)
  43. [ "$EUID" != "0" ] && exit 4
  44. rc=0
  45. # IPv6 hook (pre IPv4 start)
  46. if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
  47. /etc/sysconfig/network-scripts/init.ipv6-global start pre
  48. fi
  49. apply_sysctl
  50. #tell NM to reload its configuration
  51. if [ "$(LANG=C nmcli -t --fields running general status 2>/dev/null)" = "running" ]; then
  52. nmcli connection reload
  53. fi
  54. # bring up loopback interface
  55. action $"Bringing up loopback interface: " ./ifup ifcfg-lo
  56. case "$VLAN" in
  57. yes)
  58. if [ ! -d /proc/net/vlan ] && ! modprobe 8021q >/dev/null 2>&1 ; then
  59. net_log $"No 802.1Q VLAN support available in kernel."
  60. fi
  61. ;;
  62. esac
  63. vlaninterfaces=""
  64. vpninterfaces=""
  65. xdslinterfaces=""
  66. bridgeinterfaces=""
  67. # bring up all other interfaces configured to come up at boot time
  68. for i in $interfaces; do
  69. unset DEVICE TYPE SLAVE
  70. eval $(LANG=C grep -F "DEVICE=" ifcfg-$i)
  71. eval $(LANG=C grep -F "TYPE=" ifcfg-$i)
  72. eval $(LANG=C grep -F "SLAVE=" ifcfg-$i)
  73. eval $(LANG=C grep -F "NM_CONTROLLED=" ifcfg-$i)
  74. if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi
  75. if [ "$SLAVE" = "yes" ] && ( ! is_nm_running || is_false $NM_CONTROLLED ) ; then
  76. continue
  77. fi
  78. if [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then
  79. vpninterfaces="$vpninterfaces $i"
  80. continue
  81. fi
  82. if [ "$TYPE" = "xDSL" ]; then
  83. xdslinterfaces="$xdslinterfaces $i"
  84. continue
  85. fi
  86. if [ "$TYPE" = "Bridge" ]; then
  87. bridgeinterfaces="$bridgeinterfaces $i"
  88. continue
  89. fi
  90. if [ "$TYPE" = "IPSEC" ]; then
  91. vpninterfaces="$vpninterfaces $i"
  92. continue
  93. fi
  94. if [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; then
  95. vlaninterfaces="$vlaninterfaces $i"
  96. continue
  97. fi
  98. if LANG=C grep -EL "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i > /dev/null ; then
  99. # this loads the module, to preserve ordering
  100. is_available $i
  101. continue
  102. fi
  103. action $"Bringing up interface $i: " ./ifup $i boot
  104. [ $? -ne 0 ] && rc=1
  105. done
  106. # Bring up xDSL and VPN interfaces
  107. for i in $vlaninterfaces $bridgeinterfaces $xdslinterfaces $vpninterfaces ; do
  108. if ! LANG=C grep -EL "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i >/dev/null 2>&1 ; then
  109. action $"Bringing up interface $i: " ./ifup $i boot
  110. [ $? -ne 0 ] && rc=1
  111. fi
  112. done
  113. # Add non interface-specific static-routes.
  114. if [ -f /etc/sysconfig/static-routes ]; then
  115. if [ -x /sbin/route ]; then
  116. grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
  117. /sbin/route add -$args
  118. done
  119. else
  120. net_log $"Legacy static-route support not available: /sbin/route not found"
  121. fi
  122. fi
  123. # IPv6 hook (post IPv4 start)
  124. if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
  125. /etc/sysconfig/network-scripts/init.ipv6-global start post
  126. fi
  127. # Run this again to catch any interface-specific actions
  128. apply_sysctl
  129. touch /var/lock/subsys/network
  130. [ -n "${NETWORKDELAY}" ] && /bin/sleep ${NETWORKDELAY}
  131. ;;
  132. stop)
  133. [ "$EUID" != "0" ] && exit 4
  134. # Don't shut the network down if root is on NFS or a network
  135. # block device.
  136. rootfs=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/" && $3 != "rootfs") { print $3; }}' /proc/mounts)
  137. rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab)
  138. if [[ "$rootfs" == nfs* || "$rootopts" =~ _r?netdev ]] ; then
  139. exit 1
  140. fi
  141. systemctl show --property=RequiredBy -- -.mount | grep -q 'remote-fs.target' && exit 1
  142. vlaninterfaces=""
  143. vpninterfaces=""
  144. xdslinterfaces=""
  145. bridgeinterfaces=""
  146. remaining=""
  147. rc=0
  148. # get list of bonding, vpn, and xdsl interfaces
  149. for i in $interfaces; do
  150. unset DEVICE TYPE
  151. eval $(LANG=C grep -F "DEVICE=" ifcfg-$i)
  152. eval $(LANG=C grep -F "TYPE=" ifcfg-$i)
  153. if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi
  154. if [ "${DEVICE##cipcb}" != "$DEVICE" ] ; then
  155. vpninterfaces="$vpninterfaces $i"
  156. continue
  157. fi
  158. if [ "$TYPE" = "IPSEC" ]; then
  159. vpninterfaces="$vpninterfaces $i"
  160. continue
  161. fi
  162. if [ "$TYPE" = "Bridge" ]; then
  163. bridgeinterfaces="$bridgeinterfaces $i"
  164. continue
  165. fi
  166. if [ "$TYPE" = "xDSL" ]; then
  167. xdslinterfaces="$xdslinterfaces $i"
  168. continue
  169. fi
  170. if [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; then
  171. vlaninterfaces="$vlaninterfaces $i"
  172. continue
  173. fi
  174. remaining="$remaining $i"
  175. done
  176. for i in $vpninterfaces $xdslinterfaces $bridgeinterfaces $vlaninterfaces $remaining; do
  177. unset DEVICE TYPE
  178. (. ./ifcfg-$i
  179. if [ -z "$DEVICE" ] ; then DEVICE="$i"; fi
  180. if ! check_device_down $DEVICE; then
  181. action $"Shutting down interface $i: " ./ifdown $i boot
  182. [ $? -ne 0 ] && rc=1
  183. fi
  184. )
  185. done
  186. action $"Shutting down loopback interface: " ./ifdown ifcfg-lo
  187. sysctl -w net.ipv4.ip_forward=0 > /dev/null 2>&1
  188. # IPv6 hook (post IPv4 stop)
  189. if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then
  190. /etc/sysconfig/network-scripts/init.ipv6-global stop post
  191. fi
  192. rm -f /var/lock/subsys/network
  193. ;;
  194. status)
  195. echo $"Configured devices:"
  196. echo lo $interfaces
  197. echo $"Currently active devices:"
  198. echo $(/sbin/ip -o link show up | awk -F ": " '{ print $2 }')
  199. ;;
  200. restart|reload|force-reload)
  201. cd "$CWD"
  202. $0 stop
  203. $0 start
  204. rc=$?
  205. ;;
  206. *)
  207. echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"
  208. exit 2
  209. esac
  210. exit $rc

服务运行级别

centos6祖先进程为init,使用init控制运行级别,centos7祖先进程改为systemd,自然也有init转变为systemd来管理运行级别

  1. [root@centos7 system]# chkconfig --list
  2. Note: This output shows SysV services only and does not include native
  3. systemd services. SysV configuration data might be overridden by native
  4. systemd configuration.
  5. If you want to list systemd services use 'systemctl list-unit-files'.
  6. To see services enabled on particular target use
  7. 'systemctl list-dependencies [target]'.
  8. aegis 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  9. netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
  10. network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
  11. [root@centos7 system]#
init 0 关机
init 1 单用户
init 2 不带网络模式多用户
init 3 字符模式多用户
init 4 未使用
init 5 图形界面多用户
init 6 重启

控制服务命令

  1. service network start # 启动服务

systemctl

Centos 7之后使用,service的强化

  1. [root@centos7 init.d]# cd /usr/lib/systemd/system
  2. [root@centos7 system]# cat sshd.service

以下是sshd服务的启停脚本

  1. [Unit]
  2. Description=OpenSSH server daemon
  3. Documentation=man:sshd(8) man:sshd_config(5)
  4. After=network.target sshd-keygen.service hschen.service # 增加一个hschen.service
  5. Requires=hschen.service #在 sshd服务之前启动
  6. Wants=sshd-keygen.service
  7. [Service]
  8. Type=notify
  9. EnvironmentFile=/etc/sysconfig/sshd # 配置文件
  10. ExecStart=/usr/sbin/sshd -D $OPTIONS # 启动
  11. ExecReload=/bin/kill -HUP $MAINPID
  12. KillMode=process
  13. Restart=on-failure # 重启
  14. RestartSec=42s
  15. RestartPreventExitStatus=255
  16. [Install]
  17. WantedBy=multi-user.target # 默认在多用户运行级别下引导

运行级别

.service 表示服务 .target 表示运行级别

  1. [root@centos7 ~]# cd /lib/systemd/system
  2. [root@centos7 system]# ll
  3. total 944
  4. -rw-r--r-- 1 root root 275 Jun 10 2014 arp-ethers.service
  5. -rw-r--r-- 1 root root 222 Nov 6 2016 atd.service
  6. -rw-r--r-- 1 root root 947 Mar 3 2017 auditd.service
  7. lrwxrwxrwx 1 root root 14 Aug 18 2017 autovt@.service -> getty@.service
  8. -rw-r--r-- 1 root root 517 May 26 2017 basic.target
  9. drwxr-xr-x. 2 root root 4096 Aug 18 2017 basic.target.wants
  10. -r--r--r-- 1 root root 383 Jun 29 2017 blk-availability.service
  11. -rw-r--r-- 1 root root 379 May 26 2017 bluetooth.target
  12. -rw-r--r-- 1 root root 160 Sep 12 2016 brandbot.path
  13. ... ...
  1. [root@centos7 system]# ll runlevel*.target
  2. lrwxrwxrwx 1 root root 15 Aug 18 2017 runlevel0.target -> poweroff.target
  3. lrwxrwxrwx 1 root root 13 Aug 18 2017 runlevel1.target -> rescue.target # 救援模式
  4. lrwxrwxrwx 1 root root 17 Aug 18 2017 runlevel2.target -> multi-user.target
  5. lrwxrwxrwx 1 root root 17 Aug 18 2017 runlevel3.target -> multi-user.target
  6. lrwxrwxrwx 1 root root 17 Aug 18 2017 runlevel4.target -> multi-user.target
  7. lrwxrwxrwx 1 root root 16 Aug 18 2017 runlevel5.target -> graphical.target
  8. lrwxrwxrwx 1 root root 13 Aug 18 2017 runlevel6.target -> reboot.target
  9. [root@centos7 system]#

查看当前运行级别 & 设置下一次开机运行级别

  1. [root@centos7 system]# systemctl get-default
  2. multi-user.target
  3. [root@centos7 system]# systemctl set-default multi-user.target
  4. Removed symlink /etc/systemd/system/default.target.
  5. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.
  6. [root@centos7 system]#

控制服务

  1. systemctl start|stop|restart|reload|enable|disable|status sshd.service

系统日志

image.png

image.png

标志内核运行信息
image.png

系统安全日志
image.png

日常任务进程
image.png