【问题标题】:Ctrl C does not kill foreground process in UnixCtrl C 不会杀死 Unix 中的前台进程
【发布时间】:2014-02-18 08:05:17
【问题描述】:

我在脚本 anmed test.csh 中编写了以下代码,以在 Solaris Unix 的前台启动基于 GUI 的应用程序。当我运行脚本并想使用键盘 Ctrl + C 终止 GUI 进程时,该进程不会被终止。如果我直接从终端打开 GUI 应用程序,我可以使用 Ctrl + C 终止进程。有人可以帮我理解为什么我无法终止从脚本调用的进程吗?

#! /usr/bin/csh
# some  script to set env variables
# GUI Process
cast

然后我使用以下命令执行脚本。我无法使用 Ctrl + C 命令终止 vcast 进程。

 source test.csh

【问题讨论】:

  • 我不熟悉 'cast' 命令 - 但是你可以使用 SIGINT (Ctrl-C) 正常杀死它吗?一些进程选择忽略 SIGINT

标签: shell unix


【解决方案1】:

如果它被启动到自己的线程中,那么挂断请求可能不会到达应用程序。您可以添加一个信号处理程序来级联挂断请求或查看进程表以查看应用程序的进程 ID 是什么,然后将其终止。这也可以很容易地编写脚本。

【讨论】:

    【解决方案2】:

    您最好直接执行脚本,而不是采购它。

    1) 首先在脚本开头添加#!/bin/csh

    2) 将其设置为可执行文件:

    $ chmod u+x test.csh
    

    3) 直接执行:

    $ ./test.csh
    

    你应该能够杀死它。无论如何,请考虑问题可能与您在脚本中运行的某些可执行代码有关。考虑尝试通过在终端中逐行复制粘贴来调试脚本,直到达到滞后点。

    另一个可能令人讨厌的问题是无限的while 循环。也检查这种错误。也许你有一个永远不会到达断点的 while 循环。

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多