查看进程
控制进程
进程之间关系
进程通信方式
信号
Kill
守护进程
一般进程都是通过命令终端输入启动然后前台或者后台执行,而守护进程是机器刚刚开机就自动启动的进程,同时守护进程在执行过程中会打印相应日志到指定目录中,除此之外守护进程存在与根目录下,不会导致磁盘或光盘等介质无法卸载。
nohup … &
使用nobup命令打开一个进程,与守护进程类似,在关闭终端后,仍然可以执行。也即 nohub 命令使进程忽略 hangup(挂起)信号—比如说关闭执行命令终端。
在一个终端下执行 tail 进程,另一个终端下查询进程
关闭第一个终端后,再次查看进程发现没有虚拟终端在运行
使用 nohub 和 &结合将 tail 命令进程在后台执行,并且不会受到关闭终端的影响,而且忽略输入将输出内容打印到当前目录的 nohup.out文件中
在另一个终端中发现该进程的父进程即终端进程结束后,变为 1,即孤儿进程被祖先进程收养
守护进程daemon
不需要终端的进程,与 nohup命令相比:父进程不是终端进程,而是祖先进程;输出不是终端而是指定日志目录;使用的目录切换为根目录,只有在重启时进程才可结束
进入系统自动创建的相应进程号目录,文件和目录显示进程信息
查看进程执行目录,为 /root目录,不能随便卸载
0表示标准输入,表示关闭 1、2表示标准输出
查看demon进程 sshd
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环境

执行命令进程
ctrl + a d退出screen环境
查看保留session

恢复指定session环境

服务管理工具
服务,也就是守护进程,可以通过以下两种工具集中管理
service
Centos 6之前使用
[root@centos7 ~]# cd /etc/init.d/[root@centos7 init.d]# cat network
以下是network的启停脚本
#! /bin/bash## network Bring up/down networking## chkconfig: 2345 10 90# description: Activates/Deactivates all network interfaces configured to \# start at boot time.#### BEGIN INIT INFO# Provides: $network# Should-Start: iptables ip6tables NetworkManager-wait-online NetworkManager $network-pre# Short-Description: Bring up/down networking# Description: Bring up/down networking### END INIT INFO# Source function library.. /etc/init.d/functionsif [ ! -f /etc/sysconfig/network ]; thenexit 6fi. /etc/sysconfig/networkif [ -f /etc/sysconfig/pcmcia ]; then. /etc/sysconfig/pcmciafi# Check that networking is up.[ "${NETWORKING}" = "no" ] && exit 6# if the ip configuration utility isn't around we can't function.[ -x /sbin/ip ] || exit 1CWD=$(pwd)cd /etc/sysconfig/network-scripts. ./network-functions# find all the interfaces besides loopback.# ignore aliases, alternative configurations, and editor backup filesinterfaces=$(ls ifcfg-* | \LC_ALL=C sed -e "$__sed_discard_ignored_files" \-e '/\(ifcfg-lo$\|:\|ifcfg-.*-range\)/d' \-e '{ s/^ifcfg-//g;s/[0-9]/ &/}' | \LC_ALL=C sort -k 1,1 -k 2n | \LC_ALL=C sed 's/ //')rc=0# See how we were called.case "$1" instart)[ "$EUID" != "0" ] && exit 4rc=0# IPv6 hook (pre IPv4 start)if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then/etc/sysconfig/network-scripts/init.ipv6-global start prefiapply_sysctl#tell NM to reload its configurationif [ "$(LANG=C nmcli -t --fields running general status 2>/dev/null)" = "running" ]; thennmcli connection reloadfi# bring up loopback interfaceaction $"Bringing up loopback interface: " ./ifup ifcfg-locase "$VLAN" inyes)if [ ! -d /proc/net/vlan ] && ! modprobe 8021q >/dev/null 2>&1 ; thennet_log $"No 802.1Q VLAN support available in kernel."fi;;esacvlaninterfaces=""vpninterfaces=""xdslinterfaces=""bridgeinterfaces=""# bring up all other interfaces configured to come up at boot timefor i in $interfaces; dounset DEVICE TYPE SLAVEeval $(LANG=C grep -F "DEVICE=" ifcfg-$i)eval $(LANG=C grep -F "TYPE=" ifcfg-$i)eval $(LANG=C grep -F "SLAVE=" ifcfg-$i)eval $(LANG=C grep -F "NM_CONTROLLED=" ifcfg-$i)if [ -z "$DEVICE" ] ; then DEVICE="$i"; fiif [ "$SLAVE" = "yes" ] && ( ! is_nm_running || is_false $NM_CONTROLLED ) ; thencontinuefiif [ "${DEVICE##cipcb}" != "$DEVICE" ] ; thenvpninterfaces="$vpninterfaces $i"continuefiif [ "$TYPE" = "xDSL" ]; thenxdslinterfaces="$xdslinterfaces $i"continuefiif [ "$TYPE" = "Bridge" ]; thenbridgeinterfaces="$bridgeinterfaces $i"continuefiif [ "$TYPE" = "IPSEC" ]; thenvpninterfaces="$vpninterfaces $i"continuefiif [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; thenvlaninterfaces="$vlaninterfaces $i"continuefiif LANG=C grep -EL "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i > /dev/null ; then# this loads the module, to preserve orderingis_available $icontinuefiaction $"Bringing up interface $i: " ./ifup $i boot[ $? -ne 0 ] && rc=1done# Bring up xDSL and VPN interfacesfor i in $vlaninterfaces $bridgeinterfaces $xdslinterfaces $vpninterfaces ; doif ! LANG=C grep -EL "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i >/dev/null 2>&1 ; thenaction $"Bringing up interface $i: " ./ifup $i boot[ $? -ne 0 ] && rc=1fidone# Add non interface-specific static-routes.if [ -f /etc/sysconfig/static-routes ]; thenif [ -x /sbin/route ]; thengrep "^any" /etc/sysconfig/static-routes | while read ignore args ; do/sbin/route add -$argsdoneelsenet_log $"Legacy static-route support not available: /sbin/route not found"fifi# IPv6 hook (post IPv4 start)if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then/etc/sysconfig/network-scripts/init.ipv6-global start postfi# Run this again to catch any interface-specific actionsapply_sysctltouch /var/lock/subsys/network[ -n "${NETWORKDELAY}" ] && /bin/sleep ${NETWORKDELAY};;stop)[ "$EUID" != "0" ] && exit 4# Don't shut the network down if root is on NFS or a network# block device.rootfs=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/" && $3 != "rootfs") { print $3; }}' /proc/mounts)rootopts=$(awk '{ if ($1 !~ /^[ \t]*#/ && $2 == "/") { print $4; }}' /etc/mtab)if [[ "$rootfs" == nfs* || "$rootopts" =~ _r?netdev ]] ; thenexit 1fisystemctl show --property=RequiredBy -- -.mount | grep -q 'remote-fs.target' && exit 1vlaninterfaces=""vpninterfaces=""xdslinterfaces=""bridgeinterfaces=""remaining=""rc=0# get list of bonding, vpn, and xdsl interfacesfor i in $interfaces; dounset DEVICE TYPEeval $(LANG=C grep -F "DEVICE=" ifcfg-$i)eval $(LANG=C grep -F "TYPE=" ifcfg-$i)if [ -z "$DEVICE" ] ; then DEVICE="$i"; fiif [ "${DEVICE##cipcb}" != "$DEVICE" ] ; thenvpninterfaces="$vpninterfaces $i"continuefiif [ "$TYPE" = "IPSEC" ]; thenvpninterfaces="$vpninterfaces $i"continuefiif [ "$TYPE" = "Bridge" ]; thenbridgeinterfaces="$bridgeinterfaces $i"continuefiif [ "$TYPE" = "xDSL" ]; thenxdslinterfaces="$xdslinterfaces $i"continuefiif [ "${DEVICE%%.*}" != "$DEVICE" -o "${DEVICE##vlan}" != "$DEVICE" ] ; thenvlaninterfaces="$vlaninterfaces $i"continuefiremaining="$remaining $i"donefor i in $vpninterfaces $xdslinterfaces $bridgeinterfaces $vlaninterfaces $remaining; dounset DEVICE TYPE(. ./ifcfg-$iif [ -z "$DEVICE" ] ; then DEVICE="$i"; fiif ! check_device_down $DEVICE; thenaction $"Shutting down interface $i: " ./ifdown $i boot[ $? -ne 0 ] && rc=1fi)doneaction $"Shutting down loopback interface: " ./ifdown ifcfg-losysctl -w net.ipv4.ip_forward=0 > /dev/null 2>&1# IPv6 hook (post IPv4 stop)if [ -x /etc/sysconfig/network-scripts/init.ipv6-global ]; then/etc/sysconfig/network-scripts/init.ipv6-global stop postfirm -f /var/lock/subsys/network;;status)echo $"Configured devices:"echo lo $interfacesecho $"Currently active devices:"echo $(/sbin/ip -o link show up | awk -F ": " '{ print $2 }');;restart|reload|force-reload)cd "$CWD"$0 stop$0 startrc=$?;;*)echo $"Usage: $0 {start|stop|status|restart|reload|force-reload}"exit 2esacexit $rc
服务运行级别
centos6祖先进程为init,使用init控制运行级别,centos7祖先进程改为systemd,自然也有init转变为systemd来管理运行级别
[root@centos7 system]# chkconfig --listNote: This output shows SysV services only and does not include nativesystemd services. SysV configuration data might be overridden by nativesystemd configuration.If you want to list systemd services use 'systemctl list-unit-files'.To see services enabled on particular target use'systemctl list-dependencies [target]'.aegis 0:off 1:off 2:on 3:on 4:on 5:on 6:offnetconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:offnetwork 0:off 1:off 2:on 3:on 4:on 5:on 6:off[root@centos7 system]#
| init 0 | 关机 |
|---|---|
| init 1 | 单用户 |
| init 2 | 不带网络模式多用户 |
| init 3 | 字符模式多用户 |
| init 4 | 未使用 |
| init 5 | 图形界面多用户 |
| init 6 | 重启 |
控制服务命令
service network start # 启动服务
systemctl
Centos 7之后使用,service的强化
[root@centos7 init.d]# cd /usr/lib/systemd/system[root@centos7 system]# cat sshd.service
以下是sshd服务的启停脚本
[Unit]Description=OpenSSH server daemonDocumentation=man:sshd(8) man:sshd_config(5)After=network.target sshd-keygen.service hschen.service # 增加一个hschen.serviceRequires=hschen.service #在 sshd服务之前启动Wants=sshd-keygen.service[Service]Type=notifyEnvironmentFile=/etc/sysconfig/sshd # 配置文件ExecStart=/usr/sbin/sshd -D $OPTIONS # 启动ExecReload=/bin/kill -HUP $MAINPIDKillMode=processRestart=on-failure # 重启RestartSec=42sRestartPreventExitStatus=255[Install]WantedBy=multi-user.target # 默认在多用户运行级别下引导
运行级别
.service 表示服务 .target 表示运行级别
[root@centos7 ~]# cd /lib/systemd/system[root@centos7 system]# lltotal 944-rw-r--r-- 1 root root 275 Jun 10 2014 arp-ethers.service-rw-r--r-- 1 root root 222 Nov 6 2016 atd.service-rw-r--r-- 1 root root 947 Mar 3 2017 auditd.servicelrwxrwxrwx 1 root root 14 Aug 18 2017 autovt@.service -> getty@.service-rw-r--r-- 1 root root 517 May 26 2017 basic.targetdrwxr-xr-x. 2 root root 4096 Aug 18 2017 basic.target.wants-r--r--r-- 1 root root 383 Jun 29 2017 blk-availability.service-rw-r--r-- 1 root root 379 May 26 2017 bluetooth.target-rw-r--r-- 1 root root 160 Sep 12 2016 brandbot.path... ...
[root@centos7 system]# ll runlevel*.targetlrwxrwxrwx 1 root root 15 Aug 18 2017 runlevel0.target -> poweroff.targetlrwxrwxrwx 1 root root 13 Aug 18 2017 runlevel1.target -> rescue.target # 救援模式lrwxrwxrwx 1 root root 17 Aug 18 2017 runlevel2.target -> multi-user.targetlrwxrwxrwx 1 root root 17 Aug 18 2017 runlevel3.target -> multi-user.targetlrwxrwxrwx 1 root root 17 Aug 18 2017 runlevel4.target -> multi-user.targetlrwxrwxrwx 1 root root 16 Aug 18 2017 runlevel5.target -> graphical.targetlrwxrwxrwx 1 root root 13 Aug 18 2017 runlevel6.target -> reboot.target[root@centos7 system]#
查看当前运行级别 & 设置下一次开机运行级别
[root@centos7 system]# systemctl get-defaultmulti-user.target[root@centos7 system]# systemctl set-default multi-user.targetRemoved symlink /etc/systemd/system/default.target.Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.[root@centos7 system]#
控制服务
systemctl start|stop|restart|reload|enable|disable|status sshd.service
系统日志


标志内核运行信息
系统安全日志
日常任务进程
