search

Home  >  Q&A  >  body text

linux中Control+C是什么指令?使用什么命令可以给一个进程发出一个这样的指令?

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

PHP中文网PHP中文网2781 days ago1583

reply all(3)I'll reply

  • PHPz

    PHPz2017-04-17 11:01:04

    在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

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-17 11:01:04

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

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

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

    reply
    0
  • PHPz

    PHPz2017-04-17 11:01:04

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

    reply
    0
  • Cancelreply