如何编写一个运行程序的 bash 脚本,直到它检测到信号 SIGSEGV、分段错误?

     2023-02-22     85

关键词:

【中文标题】如何编写一个运行程序的 bash 脚本,直到它检测到信号 SIGSEGV、分段错误?【英文标题】:How do I write a bash script which runs a program until it senses signal SIGSEGV, Segmentation fault? 【发布时间】:2019-12-25 03:22:11 【问题描述】:

学习 C 指针,我确信昨天成功运行的程序涉及指向结构核心的指针,今天我什至没有碰它,至少我是这样认为的。合理吗?我不动态分配内存。 今天改了,但是我怎么写一个 bash 脚本 它将重新启动程序,直到它返回一个分段错误。 也许还可以计算在事件发生之前它可以执行程序多少次? 如何感知 SIGSEGV 信号?

【问题讨论】:

在这里发布您的 C 程序可能会更好地为您服务,这样我们就可以向您展示您在其中做错了什么。 “昨天成功运行的程序涉及指向今天转储给我的结构核心的指针”。这些是具有未定义行为的代码中的常见症状。通常是由无效的内存访问或内存损坏引起的。而且它不需要发生动态内存。如果您需要帮助查找问题,请显示您的代码。或者,如果在 Linux 中开发,请使用 valgrind 来帮助您查找内存问题。 【参考方案1】:

您可以通过检查其退出状态来检测它。这里是man bash

   The return value of a simple command is its exit status,  or  128+n  if
   the command is terminated by signal n.

由于kill -lSIGSEGV 显示为信号11,因此您可以运行程序直到它以139 退出:

until ./yourprogram; [ $? -eq 139 ]; do printf '.'; done

如果这是yourprogram.c:

#include <unistd.h>

int main()

  if(getpid()%100 == 0 ) 
    char* ptr = 1;
    *ptr = 1;
  
  return 0;

你会得到这样的结果(每个非段错误调用一个点):

............................Segmentation fault

【讨论】:

非常有用的脚本。我虽然坚如磐石的程序被证明是

考虑到它的参数,如何检测bash脚本是不是已经在运行[重复]

】考虑到它的参数,如何检测bash脚本是不是已经在运行[重复]【英文标题】:Howtodetectifabashscriptisalreadyrunning,consideringitsarguments[duplicate]考虑到它的参数,如何检测bash脚本是否已经在运行[重复]【发布时间】:2021-10-2906:57:11【问题... 查看详情

编写一个bash脚本来运行一个带有命令行参数的java程序? [复制]

】编写一个bash脚本来运行一个带有命令行参数的java程序?[复制]【英文标题】:Writingabashscripttorunajavaprogramwithcommandlinearguments?[duplicate]【发布时间】:2017-04-1819:45:36【问题描述】:我编写了一个维护银行帐户数据库的Java程序(... 查看详情

如何从 bash 脚本并行运行多个程序?

】如何从bash脚本并行运行多个程序?【英文标题】:Howdoyourunmultipleprogramsinparallelfromabashscript?【发布时间】:2010-06-0910:06:18【问题描述】:我正在尝试编写一个.sh文件,它同时运行许多程序我试过了prog1prog2但是运行prog1然后等到... 查看详情

如何为需要 4 个数字输入的 C 程序编写 Bash 脚本? [复制]

】如何为需要4个数字输入的C程序编写Bash脚本?[复制]【英文标题】:HowdoIwriteaBashscriptforaCprogramthattakes4numericalinputs?[duplicate]【发布时间】:2020-12-2419:37:23【问题描述】:我正在为一个c程序编写一个bash脚本,该程序要求输入4个... 查看详情

如何编写文本文件,然后在同一个 Bash 脚本中读取它?

】如何编写文本文件,然后在同一个Bash脚本中读取它?【英文标题】:HowcanIwriteatextfile,andthenreadfromitinthesameBashscript?【发布时间】:2019-09-0213:14:51【问题描述】:我在Vim中有一个热键,可以让我进入命令模式并调用Bash脚本。Bash... 查看详情

如何通过 bash 脚本检测来自 ant/maven 的构建错误?

】如何通过bash脚本检测来自ant/maven的构建错误?【英文标题】:howtodetectabuilderrorfromant/mavenviaabashscript?【发布时间】:2010-11-2509:33:06【问题描述】:我正在编写一个bash脚本来自动化构建过程。有两个主要的构建块,一个是ant任... 查看详情

如果进程死了,如何编写 bash 脚本来重新启动进程?

】如果进程死了,如何编写bash脚本来重新启动进程?【英文标题】:HowdoIwriteabashscripttorestartaprocessifitdies?【发布时间】:2010-10-1608:38:07【问题描述】:我有一个python脚本,它将检查队列并对每个项目执行操作:#checkqueue.pywhileTrue... 查看详情

如何编写在程序上执行 gdb 的 bash 脚本

】如何编写在程序上执行gdb的bash脚本【英文标题】:Howtowriteabashscriptthatexecutesgdbonaprogram【发布时间】:2020-04-0420:29:32【问题描述】:我正在从http://www.cis.syr.edu/~wedu/seed/Labs_12.04/Software/Buffer_Overflow/Buffer_Overflow.pdf重新创建缓冲区... 查看详情

使 bash 脚本在 Linux 和 Solaris 上运行

...异。现在,我正在OpenSuse(linux)上开发它。是否有一些关于如何编写/编 查看详情

如何检查是不是在 bash 脚本中以 root 身份运行

】如何检查是不是在bash脚本中以root身份运行【英文标题】:Howtocheckifrunningasrootinabashscript如何检查是否在bash脚本中以root身份运行【发布时间】:2013-08-1511:24:30【问题描述】:我正在编写一个需要root级别权限的脚本,我想让它... 查看详情

编写一个linuxshell脚本,运行它提示输入你的姓名,当你输入完毕之后程序再次将你输入的结果显示在屏幕上。

#!/bin/bashread-p"请输入你的名字:"nameecho$name参考技术A#!/bin/bash这里写你的shell文件的位置,如果是linux的bash就应该是这个read-p"Pleaseinputyourname:"name读入名字echo-e"\nYourfullnameis:$name输出名字 查看详情

如何编写一个简单的shell脚本.

Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了... 查看详情

带有命令行参数的 C++ 的 Makefile 和 Bash 脚本

...2016-06-0708:55:17【问题描述】:对于我的家庭作业,我刚刚编写了一个c++程序,当你运行它时应该提供一个命令行参数(例如-l)。现在,我需要在Unix中编译和运行我的程序。所以,我需要一个makefile和一个bash脚本(名称是cddb 查看详情

求助:如何在shell脚本中添加写日志的功能

参考技术A如何编写一个shell脚本本文结合大量实例阐述如何编写一个shell脚本。  为什么要进行shell编程  在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而... 查看详情

如何在 Windows 上运行我的 bash 程序? [关闭]

】如何在Windows上运行我的bash程序?[关闭]【英文标题】:HowcanIrunmybashprogramonWindows?[closed]【发布时间】:2018-12-1313:30:31【问题描述】:嘿,我在哪里可以在bash中运行我的程序?我在bash中编写了一个代码,我想检查它是否真的有... 查看详情

如何从 haskell 程序调用 bash 或 shell 脚本?

】如何从haskell程序调用bash或shell脚本?【英文标题】:Howtoinvokebashorshellscriptsfromahaskellprogram?【发布时间】:2012-05-1904:18:59【问题描述】:我正在用我在gitbash中运行的haskell编写一些shell脚本,但是我希望能够从这些脚本中使用其... 查看详情

linux中编写bash脚本的10个技巧

Shell脚本编程是你在Linux下学习或练习编程的最简单的方式。尤其对系统管理员要处理着自动化任务,且要开发新的简单的实用程序或工具等(这里只是仅举几例)更是必备技能。本文中,我们将分享10个写出高效可靠的bash脚本的实... 查看详情

如何从 Bash 脚本中检测操作系统?

】如何从Bash脚本中检测操作系统?【英文标题】:HowtodetecttheOSfromaBashscript?【发布时间】:2010-09-2811:56:21【问题描述】:我想将我的.bashrc和.bash_login文件保留在版本控制中,以便我可以在我使用的所有计算机之间使用它们。问题... 查看详情