linux中Control+C是什么指令?使用什么命令可以给一个进程发出一个这样的指令?
PHP中文网
PHP中文网 2017-04-17 10:59:04
0
3
1599

kill可以发出这样的指令吗?我的主要目的是要能写在bash脚本中

PHP中文网
PHP中文网

认证0级讲师

全員に返信(3)
PHPzhong

在linux中,与进程的控制交互是通过信号来实现的,以下是几种常见的信号量

SIGINT: 当用户按某些终端键时, 引发终端产生的信号. 如Ctrl+C键, 这将产生中断信号(SIGINT). 它将停止一个已失去控制的程序.

SIGSEGV: 由硬件异常(除数为0, 无效的内存引用等等)产生的信号. 这些条件通常由硬件检测到, 并将其通知内核. 然后内核为该条件发生时正在运行的进程产生该信号.

SIGURG: 在网络连接上传来带外数据时产生.

SIGPIPE: 在管道的读进程已终止后, 一个进程写此管道时产生. 当类型为SOCK_STREAM的socket已不再连接时, 进程写到该socket也产生此信号.

SIGALRM: 进程所设置的闹钟时钟超时的时候产生.
SIGABRT: 进程调用abort函数时产生此信号, 进程异常终止.

SIGCHLD: 在一个进程终止或停止时, 它将把该信号发送给其父进程. 按系统默认, 将忽略此信号. 如果父进程希望被告知其子进程的这种状态改变, 则应该捕捉此信号. 通常是用wait系列函数捕捉, 如果不wait的话, 子进程将成为一个僵尸进程.

SIGIO: 此信号指示一个异步I/O事件.

SIGSYS: 该信号指示一个无效的系统调用.

SIGTSTP: 交互式停止信号. Ctrl+Z, 按下时, 终端将产生此信号, 进程被挂起.

你说的control+c实际上是终端把一个SIGINT信号发给了进程,而如果你用kill指令而不带任何参数,实际上是发送了一个SIGKILL信号。但是kill指令是可以发送指定信号的,比如你要发一个SIGINT信号,可以这样

kill -s SIGINT process_name
いいねを押す +0
巴扎黑

ctroll+c 是终止当前的前台进程。写在脚本里不行~~因为你脚本里的命令都是串行的,一旦挂在后台了,ctrl+c也没用了。
不知道你具体需求是啥,如果是要kill掉某进程,还是用

kill `ps |grep "process name"|grep -v grep|awk '{print $1}'`

参考这个问题:http://segmentfault.com/question/86/%...

いいねを押す +0
PHPzhong

ctrl+c其实是一个信号,向进程发送中断信号。
关于进程对中断、停止等信号会触发什么动作可以参考《unix环境高级编程》

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート