![查看所有 Bash/Shell 脚本相关的常见问题解答](https://www.alaica.com/wp-content/uploads/linux-29.png)
如何停止cp 命令或mv 命令Linux 或 Unix 命令?如果 mv 或 cp 命令在实时系统上中断会发生什么?
用户可以在命令或 bash/perl/python 脚本执行期间按CTRL – c(按住 ctrl 键,然后按 c)来停止或中断任何命令,例如 cp、mv 等。另一种选择是使用kill命令通过PID杀死进程:
通过运行以下命令获取firefox的进程ID(打开另一个终端并键入命令):
$ ps aux | grep -i firefox
用户 PID %CPU %MEM VSZ RSS TT STAT 启动时间命令 非常 31241 2.8 9.0 5806852 752084 ?? S 11 :08AM 31 : 35.18 /Applications/Firefox.app/Contents/MacOS/firefox -foreground 非常v 55647 0.0 0.0 2442020 1788 s002 S+ 3:50 AM 0 : 00.00 grep -i firefox
要杀死 PID # 31241(来自第二列),请运行:
如果一切都失败,请尝试传递终止信号:验证 firefox 是否已与 ps 命令和grep 命令
一起使用:
您可以将 firefox 命令替换为 cp 命令或任何其他命令您选择的命令。
$ kill -15 pid
$ kill -TERM 31241
$ kill -15 31241
$ kill -9 31241
$ ps aux | grep -i firefox
有关 CTRL-C 的更多信息
当您按下 CTRL-C 时,当前正在运行的命令或进程将获得中断/终止 (SIGINT) 信号。这个信号意味着终止进程。大多数命令/进程都会遵守 SIGINT 信号,但有些命令/进程可能会忽略它。使用cat 命令时,您可以按 Ctrl-D 关闭 bash shell 或打开文件。您可以按 Ctrl-Z 暂停当前在 bash shell 中运行的前台进程。
如果 cp 命令被中断会发生什么?
如果中断 cp,已传输的文件将从源目录复制到目标目录,并且其余操作将中止。
如果 mv 命令被中断会发生什么?
从线程:
如果移动同一文件系统上的目录,则只需将目录条目从文件系统中的一个位置移动到另一个位置。例如 mv /source/dir /target/dir 将从 /source 中删除 dir 的目录条目,并在 /target 中创建一个新目录条目。这是通过一个原子系统调用(即不间断)来完成的。包含 dir 的目录条目以及目录本身的实际内容的 inode 不受影响。
如果您将目录从一个文件系统移动到另一个文件系统,则文件将被一一传输(正如 Ignacio 在他的回答中提到的那样),即如果您中断 mv,则已传输的文件将从源目录中删除。
如何在 Bash shell 脚本中捕获 ctrl-c
使用trap 命令捕获/捕获 ctrl+c 并禁用它:
#!/bin/bash # 捕获 ctrl-c 并调用 ctrl_c() 捕获消息 INT function message ( ) { echo "** CTRL-C按下,清理可以在message()中完成...." # 清理命令如下 } echo "** 按 CTRL-C 捕获密钥。" 对于{ 1 .. 100 }中的 i ;do # TODO: 在此处插入工作 # sleep 1 echo -n "." 完毕