- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试解决一个问题,因为我正在学习在 C 中使用系统调用。我使用的是 Ubuntu 12.04 64 位。
问题的陈述说我需要实现一个代码,允许在其他命令 (cmd1) 正确结束后执行命令 (cmd2)。还说用户可以指定命令和用户想要的所有参数。
此时我创建了这个小程序:
#include <syscall.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int cmd1 = system("sleep 5");
if((cmd1 = (-1)))
{
write(1,"error in command 1",18);
}
if(cmd1=(0))
{
write(1, "hello world", 11);
}
return EXIT_SUCCESS;
}
接下来,声明说如果第一个命令没有正确完成,第二个命令将不会执行,而且,用户可以使用 Ctrl+\或 Ctrl+4 (SIGQUIT) 和第二个命令 (cmd2) 中止 cmd1 的执行使用 Ctrl+C (SIGINT)。如果第二个命令被取消,第一个命令必须正常完成。
我在声明的第二部分有问题,因为我从来没有在 C 中使用过这种东西,而且我在 Linux 中真的是菜鸟。我试图阅读有关 SIGQUIT 和 SIGINT 的内容,但我不理解我所阅读的所有内容,可能是因为我还没有学到很多关于 linux 的东西。
谁能帮帮我?
谢谢!
我使用 if 函数编辑此版本的代码。它无法正常工作,我正在寻找如何检查第一个命令是否正确完成。
最佳答案
只是为了让你开始。让我解释一下这个问题,因为我觉得你还没有理解它。
The statement of the problem says that I need to implement a code that allows to execute a command (cmd2) after the correct end of other command (cmd1).
用户 cmd1
和 cmd2
会给你两个命令。 cmd1
应该首先执行。
Next, statement says that if the first command doesn't finish correctly the second will not execute,
仅当 cmd1
正常执行完毕时,才应执行 cmd2
。
If second command is canceled the first must be completed normaly.
cmd1
的执行不依赖于cmd2
。
user can abort the execution of the cmd1 using Ctrl+\ or Ctrl+4 (SIGQUIT)
你看起来很困惑。在这里,他们的意思是说,cmd1
可以通过向其传递 SIGQUIT(Ctrl+\或 Ctrl+4)来异常终止,在这种情况下,不应执行 cmd2
。您不必对信号部分进行编码。您需要做的是,检查 cmd1
是如何终止的,如果是正常终止则执行 cmd2
否则不执行 cmd2。
注意 发布上述部分时,问题中的代码截然不同。
这是您在格林威治标准时间 2015 年 5 月 20 日星期三凌晨 5 点 02 分的代码。(不得不包括这个,因为您更改代码的频率太高了)
int main(void)
{
int cmd1 = system("sleep 5");
if((cmd1 = (-1)))
{
write(1,"error in command 1",18);
}
if(cmd1=(0))
{
write(1, "hello world", 11);
}
return EXIT_SUCCESS;
}
此处您使用=
进行比较。 =
是用来赋值的,不是平等同情。 ==
用于平等同情。所以,if((cmd1 = (-1)))
和 if(cmd1=(0))
应该是 if((cmd1 == (- 1)))
和 if(cmd1 == (0))
您正在检查返回值是否为 -1 表示失败。这是不正确的。成功的退出代码为 0,失败的退出代码为 0 以外的任何值。因此,if((cmd1 = (-1)))
应该是 if(cmd1 != 0)
.
关于c - 使用 SIGQUIT 和 SIGINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30331173/
脚本1.sh: #!/bin/bash ./script2.sh echo after-script 脚本2.sh: #!/bin/bash function handler { exi
我正在编写一个多线程程序,我想在其中处理来自用户的可能的 Ctrl-C 命令以终止执行。据我所知,不能保证能够取消每个工作线程的主线程会捕获信号。因此,是否有必要为工作线程的代码设置一个不同的信号处理
我正在编写一个多线程程序,我想在其中处理来自用户的可能的 Ctrl-C 命令以终止执行。据我所知,不能保证能够取消每个工作线程的主线程会捕获信号。因此,是否有必要为工作线程的代码设置一个不同的信号处理
标题说明了一切。我该如何处理或捕捉 SIGINT在 Julia ?从文档中我假设我只是想 catch InterruptException使用 try/catch像下面这样块 try whil
以下是此问题的简单重现: void handler(int sig){ if(sig == SIGINT){ printf("Signal caught
鉴于此代码: #include #include #include void sigint_handler(int h) { printf("Hey! I caught a SIGINT
我正在写一个shell,现在它来控制子进程。当我在子进程中使用 signal (SIGTERM, SIG_DFL); 时, 信号 SIGINT 由 Ctrl + C 生成,该信号终止整个操作系统 sh
我正在尝试 SIGINT。我基本上希望我的程序在用户按下 control-c 时立即启动。当这种情况发生时,我将让程序制作一个管道。 现在,我决定当在信号处理程序中按下 control-c 时,它将调
我想处理来自内核的 SIGINT 信号,以便调用一个函数来优雅地关闭我的进程。 这是一个工作示例,一个线程正在等待信号,然后调用函数 handle_stop: #include #include
我有一个 bash 脚本,它启动了 2 个进程: openocd ...flags... 2>openocd.log & arm-none-eabi-gdb 在 gdb 中,使用 Ctrl+C 中断执
我有几个带有 while read line 循环的脚本,当我按下 Ctrl C 时,它们不执行我的清理功能。例如: #!/bin/bash cleanup() { stty echo exi
我想捕获从 Script-A.sh 发送到 Script-B.sh 的信号所以在 Script-A.sh 中我使用命令: (Send SIGINT to Script-B.sh) kill -2 $P
我正在尝试处理 SIGINT。 SIGINT 在我的程序中的主要目的是取消当前搜索功能并打印当前可用的结果。但是每当我 try catch SIGINT 信号时,它都会关闭我的程序。 (我搜索了这么多
我有 2 个程序(由我编写)。第一个名为“MAN”的进程将调用“D”(第二个),这是一个将在后台运行直到以某种方式终止的进程。 我想在不终止 D 的情况下终止 MAN。 我尝试使用 ctrl + c
我应该编写一个 C 程序来处理第一个带有自定义处理程序的 SIGINT,然后重置默认行为。我的自定义 SIGINT 处理程序应该只打印一条消息。这是我写的: #include #include #
如果父进程接收到 ctrl-C 信号,我一直试图阻止我的父线程杀死子进程。我已经没有想法了。 父进程已经捕捉到 SIGINT,所以我想要和现在 child 死了一样。 int main() {
我对Python很陌生,所以如果这个问题非常基本,请原谅我。 我试图在使用选择模块从套接字接受数据时处理键盘中断。因此,我有一个 select.select() 函数调用来等待来自套接字的数据,然后将
我无法理解为什么我的 SIGINT 从未被下面的代码捕获。 #!/usr/bin/env python from threading import Thread from time import sl
我正在编写以下代码。该程序应该能够使用 sigaction 处理 SIGINT。到目前为止,它几乎完成了,但我遇到了两个问题。 第一个问题是如果程序在 3 秒内收到 3 个信号,它应该打印“正在关闭”
在 C 中,我想捕获 SIGINT 信号并打印出类似这样的消息通过使用 sigaction 并通过 向其传递新的处理程序来“接收到 SIGINT” sa.sa_sigaction = handler;
我是一名优秀的程序员,十分优秀!