nohup 命令

nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。 nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。

使用权限

所有使用者

语法格式

  1. nohup Command [ Arg ] [ & ]

参数说明:

Command:要执行的命令。
Arg:一些参数,可以指定输出文件。
&:让命令在后台执行,终端退出后命令仍旧执行。

实例

以下命令在后台执行 root 目录下的 runoob.sh 脚本:

  1. nohup /root/runoob.sh &

在终端如果看到以下输出说明运行成功:

  1. appending output to nohup.out

这时我们打开 root 目录 可以看到生成了 nohup.out 文件。
如果要停止运行,你需要使用以下命令查找到 nohup 运行脚本到 PID,然后使用 kill 命令来删除:

  1. ps -aux | grep "runoob.sh"

参数说明:

  • a : 显示所有程序
  • u : 以用户为主的格式来显示
  • x : 显示所有程序,不区分终端机

另外也可以使用 ps -def | grep “runoob.sh“ 命令来查找。
找到 PID 后,就可以使用 kill PID 来删除。

  1. kill -9 进程号PID

以下命令在后台执行 root 目录下的 runoob.sh 脚本,并重定向输入到 runoob.log 文件:

  1. nohup /root/runoob.sh > runoob.log 2>&1 &

2>&1 解释:
将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 runoob.log 文件中。

  1. 0 stdin (standard input,标准输入)
  2. 1 stdout (standard output,标准输出)
  3. 2 stderr (standard error,标准错误输出)

Linux ps 命令

Linux ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。

语法

  1. ps [options] [--help]

参数

  • ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义
  • -A 列出所有的进程
  • -w 显示加宽可以显示较多的资讯
  • -au 显示较详细的资讯
  • -aux 显示所有包含其他使用者的行程
  • au(x) 输出格式 :

    1. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    • USER: 行程拥有者
    • PID: pid
    • %CPU: 占用的 CPU 使用率
    • %MEM: 占用的记忆体使用率
    • VSZ: 占用的虚拟记忆体大小
    • RSS: 占用的记忆体大小
    • TTY: 终端的次要装置号码 (minor device number of tty)
    • STAT: 该行程的状态:
      • D: 无法中断的休眠状态 (通常 IO 的进程)
      • R: 正在执行中
      • S: 静止状态
      • T: 暂停执行
      • Z: 不存在但暂时无法消除
      • W: 没有足够的记忆体分页可分配
      • <: 高优先序的行程
      • N: 低优先序的行程
      • L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
    • START: 行程开始时间
    • TIME: 执行的时间
    • COMMAND:所执行的指令

      实例

      查找指定进程格式:
      1. ps -ef | grep 进程关键字
      例如显示 php 的进程:
      1. # ps -ef | grep php
      2. root 794 1 0 2020 ? 00:00:52 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
      3. www-data 951 794 0 2020 ? 00:24:15 php-fpm: pool www
      4. www-data 953 794 0 2020 ? 00:24:14 php-fpm: pool www
      5. www-data 954 794 0 2020 ? 00:24:29 php-fpm: pool www
      6. ...
      显示进程信息:
      1. # ps -A
      2. PID TTY TIME CMD
      3. 1 ? 00:00:02 init
      4. 2 ? 00:00:00 kthreadd
      5. 3 ? 00:00:00 migration/0
      6. 4 ? 00:00:00 ksoftirqd/0
      7. 5 ? 00:00:00 watchdog/0
      8. 6 ? 00:00:00 events/0
      9. 7 ? 00:00:00 cpuset
      10. 8 ? 00:00:00 khelper
      11. 9 ? 00:00:00 netns
      12. 10 ? 00:00:00 async/mgr
      13. 11 ? 00:00:00 pm
      14. 12 ? 00:00:00 sync_supers
      15. 13 ? 00:00:00 bdi-default
      16. 14 ? 00:00:00 kintegrityd/0
      17. 15 ? 00:00:02 kblockd/0
      18. 16 ? 00:00:00 kacpid
      19. 17 ? 00:00:00 kacpi_notify
      20. 18 ? 00:00:00 kacpi_hotplug
      21. 19 ? 00:00:27 ata/0
      22. ……省略部分结果
      23. 30749 pts/0 00:00:15 gedit
      24. 30886 ? 00:01:10 qtcreator.bin
      25. 30894 ? 00:00:00 qtcreator.bin
      26. 31160 ? 00:00:00 dhclient
      27. 31211 ? 00:00:00 aptd
      28. 31302 ? 00:00:00 sshd
      29. 31374 pts/2 00:00:00 bash
      30. 31396 pts/2 00:00:00 ps
      显示指定用户信息
      1. # ps -u root //显示root进程用户信息
      2. PID TTY TIME CMD
      3. 1 ? 00:00:02 init
      4. 2 ? 00:00:00 kthreadd
      5. 3 ? 00:00:00 migration/0
      6. 4 ? 00:00:00 ksoftirqd/0
      7. 5 ? 00:00:00 watchdog/0
      8. 6 ? 00:00:00 events/0
      9. 7 ? 00:00:00 cpuset
      10. 8 ? 00:00:00 khelper
      11. 9 ? 00:00:00 netns
      12. 10 ? 00:00:00 async/mgr
      13. 11 ? 00:00:00 pm
      14. 12 ? 00:00:00 sync_supers
      15. 13 ? 00:00:00 bdi-default
      16. 14 ? 00:00:00 kintegrityd/0
      17. 15 ? 00:00:02 kblockd/0
      18. 16 ? 00:00:00 kacpid
      19. ……省略部分结果
      20. 30487 ? 00:00:06 gnome-terminal
      21. 30488 ? 00:00:00 gnome-pty-helpe
      22. 30489 pts/0 00:00:00 bash
      23. 30670 ? 00:00:00 debconf-communi
      24. 30749 pts/0 00:00:15 gedit
      25. 30886 ? 00:01:10 qtcreator.bin
      26. 30894 ? 00:00:00 qtcreator.bin
      27. 31160 ? 00:00:00 dhclient
      28. 31211 ? 00:00:00 aptd
      29. 31302 ? 00:00:00 sshd
      30. 31374 pts/2 00:00:00 bash
      31. 31397 pts/2 00:00:00 ps
      显示所有进程信息,连同命令行
      1. # ps -ef //显示所有命令,连带命令行
      2. UID PID PPID C STIME TTY TIME CMD
      3. root 1 0 0 10:22 ? 00:00:02 /sbin/init
      4. root 2 0 0 10:22 ? 00:00:00 [kthreadd]
      5. root 3 2 0 10:22 ? 00:00:00 [migration/0]
      6. root 4 2 0 10:22 ? 00:00:00 [ksoftirqd/0]
      7. root 5 2 0 10:22 ? 00:00:00 [watchdog/0]
      8. root 6 2 0 10:22 ? /usr/lib/NetworkManager
      9. ……省略部分结果
      10. root 31302 2095 0 17:42 ? 00:00:00 sshd: root@pts/2
      11. root 31374 31302 0 17:42 pts/2 00:00:00 -bash
      12. root 31400 1 0 17:46 ? 00:00:00 /usr/bin/python /usr/sbin/aptd
      13. root 31407 31374 0 17:48 pts/2 00:00:00 ps -ef