Linux C 判断一个进程是否是脚本进程

文章目录

  • 一、Linux 下常用的脚本
    • 1.1 Bash shell
    • 1.2 POSIX shell script
    • 1.3 Python script
    • 1.4 Perl script
    • 1.5 Ruby script
    • 1.6 Lua script
  • 二、脚本进程判断
  • 总结

一、Linux 下常用的脚本

在 /usr/bin/ 下查看系统有哪些脚本文件。在 Linux 系统中,/usr/bin/ 目录下的文件是可执行文件的存放位置之一,它包含了大量的系统命令和工具。这些文件通常是系统安装过程中自动安装的,也可能是用户手动安装的。这些文件的作用非常广泛,包括系统管理、文件处理、文本编辑、编译构建、网络通信等等。

[root@localhost ~]# file /usr/bin/* | grep script | more
/usr/bin/5250keys:                               POSIX shell script, ASCII text executable
/usr/bin/abrt-action-analyze-ccpp-local:         POSIX shell script, ASCII text executable
/usr/bin/abrt-action-analyze-core:               Python script, ASCII text executable
/usr/bin/abrt-action-analyze-vmcore:             Python script, ASCII text executable
/usr/bin/abrt-action-analyze-vulnerability:      POSIX shell script, ASCII text executable
/usr/bin/abrt-action-check-oops-for-hw-error:    Python script, ASCII text executable
/usr/bin/abrt-action-install-debuginfo:          Python script, ASCII text executable
/usr/bin/abrt-action-list-dsos:                  Python script, ASCII text executable
/usr/bin/abrt-action-notify:                     Python script, ASCII text executable
/usr/bin/abrt-action-perform-ccpp-analysis:      Python script, ASCII text executable
/usr/bin/abrt-action-save-kernel-data:           Bourne-Again shell script, ASCII text executable
/usr/bin/abrt-handle-upload:                     Python script, ASCII text executable
/usr/bin/abs2rel:                                Lua script, ASCII text executable
/usr/bin/aclocal:                                Perl script, ASCII text executable
/usr/bin/aclocal-1.13:                           Perl script, ASCII text executable
/usr/bin/alias:                                  POSIX shell script, ASCII text executable
/usr/bin/alsa-delay:                             Bourne-Again shell script, ASCII text executable
/usr/bin/alsaunmute:                             POSIX shell script, ASCII text executable
/usr/bin/amuFormat.sh:                           POSIX shell script, ASCII text executable
/usr/bin/anaconda-cleanup:                       Python script, ASCII text executable
/usr/bin/anaconda-disable-nm-ibft-plugin:        POSIX shell script, ASCII text executable
/usr/bin/analog:                                 Python script, ASCII text executable
/usr/bin/antlr:                                  POSIX shell script, ASCII text executable
/usr/bin/AtoB:                                   POSIX shell script, ASCII text executable
/usr/bin/audit2allow:                            Python script, ASCII text executable
/usr/bin/AuditVerify:                            POSIX shell script, ASCII text executable
/usr/bin/autoconf:                               POSIX shell script, ASCII text executable
/usr/bin/autoexpect:                             POSIX shell script, ASCII text executable
/usr/bin/autoheader:                             Perl script, ASCII text executable
/usr/bin/autom4te:                               Perl script, ASCII text executable
/usr/bin/automake:                               Perl script, ASCII text executable
/usr/bin/automake-1.13:                          Perl script, ASCII text executable

1.1 Bash shell

Bash:Bash(Bourne-Again shell script)是 Linux 中最常用的 shell 之一,它支持变量、条件语句、循环语句等,可以编写各种系统管理和自动化脚本。

Bash shell脚本文件的第一行指定要使用的shell,#! 这两个字符告诉shell用哪个shell来运行脚本,
如下所示使用 bash shell 来运行脚本

#!/bin/bash
[root@localhost ~]# file /bin/bash
/bin/bash: ELF 64-bit LSB executable

1.2 POSIX shell script

Linux POSIX shell script 是一种基于 POSIX 标准的 shell 脚本语言,它是基于 Unix 系统标准的标准化的 shell 脚本语言,具有很好的兼容性和可移植性。
POSIX 是 “Portable Operating System Interface” 的缩写,是一组与操作系统相关的标准,定义了 Unix 系统的标准接口,包括文件系统、命令行工具、系统调用等。POSIX shell 是遵循 POSIX 标准的 shell 脚本语言,它的语法和功能与 Bash、zsh 等 shell 不完全相同。

#!/bin/sh

1.3 Python script

Python:Python 是一种通用的高级编程语言,也可以用作脚本语言。它具有简洁、易读、易维护等特点,广泛应用于数据分析、Web 开发、科学计算等领域。

#!/usr/bin/python

1.4 Perl script

Perl:Perl 是一种强大的文本处理语言,被广泛应用于网络编程、系统管理等领域。它支持正则表达式、模块化编程等特性,是 Unix 系统中最流行的脚本语言之一。

#!/usr/bin/perl

1.5 Ruby script

Ruby:Ruby 是一种面向对象的动态编程语言,也可以用作脚本语言。它具有简洁、优雅、易读、易学等特点,被广泛应用于 Web 开发、游戏开发等领域。

#!/usr/bin/ruby

1.6 Lua script

Lua:Lua 是一种轻量级、高效的脚本语言,特别适合嵌入式系统和游戏开发。它支持面向对象编程、闭包、协程等特性,具有极高的扩展性和灵活性。

#!/usr/bin/lua

二、脚本进程判断

可以通过查看进程的命令行参数来判断一个进程是否是脚本进程。通常,脚本进程的命令行参数中包含解释器的路径以及脚本文件的路径。

/bin/bash ./test.sh

使用C语言来实现:
(1)打开 /proc/[pid]/cmdline 文件,其中 [pid] 为进程 ID。
(2)读取文件内容,获取进程的命令行参数,将命令行中字符 ‘\0’ 转化为 ’ '。
(3)判断命令行参数中是否包含解释器的路径和脚本文件的路径,来确定进程是否为脚本进程。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_BUF_SIZE 4096

int is_script_process(int pid)
{
    char cmdline_path[256];
    char cmdline_buf[MAX_BUF_SIZE];
    char *interpreter = NULL;
    char *script_file = NULL;

    // 构造 /proc/[pid]/cmdline 文件路径
    sprintf(cmdline_path, "/proc/%d/cmdline", pid);

    // 打开 /proc/[pid]/cmdline 文件
    FILE *cmdline_fp = fopen(cmdline_path, "r");
    if (cmdline_fp == NULL) {
        perror("Failed to open cmdline file");
        return 0;
    }

    // 读取 /proc/[pid]/cmdline 文件内容, 将命令行中 '\0' 转化为 ' '
    if( cmdline_fp != NULL ) {
        int str_len = fread(cmdline_buf, 1, MAX_BUF_SIZE - 1, cmdline_fp);
        int i = 0;
        while(i < str_len-1) {
            if(cmdline_buf[i] == '\0') {
                cmdline_buf[i] = ' ';
            }
            i++;
        }
    }

    // 关闭文件
    fclose(cmdline_fp);

    // 解析命令行参数
    interpreter = strtok(cmdline_buf, " ");
    script_file = strtok(NULL, " ");

    printf("interpreter = %s\n", interpreter);
    printf("script_file = %s\n", script_file);

    // 判断是否为脚本进程
    if (interpreter != NULL && script_file != NULL) {
        if (strstr(interpreter, "bin/bash") != NULL || strstr(interpreter, "usr/bin/python") != NULL) {
            return 1;
        }
    }

    return 0;
}

int main(int argc, char *argv[])
{
    int pid = atoi(argv[1]);

    if (is_script_process(pid)) {
        printf("Process %d is a script process\n", pid);
    } else {
        printf("Process %d is not a script process\n", pid);
    }

    return 0;
}

总结

最近在使用chatgpt,大部分参考 chatgpt 的回答,chatgpt给出的代码还是有一些小问题,代码示例在chatgpt的基础上稍加修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/6015.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

部署大数据集群时踩过的坑 (持续更新)

大数据集群踩过的坑 前言(必看) 如果你遇到了和我一样的问题并通过搜索引擎进入这篇文章&#xff0c;请善用CtrlF键搜索 该自检手册仅用于自己学习使用&#xff0c;记录所有自己遇到的问题。如果你没有检索到你的问题&#xff0c;请使用Bing或Google进行搜索 该自检手册严格…

PCB生产工艺流程一:PCB分类的三大要点

PCB生产工艺流程一&#xff1a;PCB分类的三大要点 PCB在材料、层数、制程上的多样化以适不同的电子产品及其特殊需求。因此其种类划分比较多&#xff0c;以下就归纳一些通用的区别办法,来简单介绍PCB的分类以及它的制造工艺。那么我们就从它的三个方面来分析一下吧。 1、材料…

某汽车零部件企业:定期反钓鱼演练是降低企业安全风险的优选方案

客户背景 作为一家主要从事于汽车、摩托车零部件的开发、制造和销售的中日合资企业&#xff0c;服务的客户大多为国内汽车生产领域领先企业&#xff0c;旗下进出口业务较多&#xff0c;该汽车零部件企业需要与海外企业一直保持着电子邮件的往来&#xff0c;电子邮件安全十分重…

eNSP 实现VLAN间通信实验

关于本实验本实验将通过上述方法&#xff08;配置Dot1q终结子接口和VLANIF接口&#xff09;实现不同VLAN间的通信&#xff0c;其中涵盖了与这两种方法相关的原理、配置命令和验证方法。实验目的掌握配置Dot1q终结子接口的方法&#xff0c;实现VLAN间通信。掌握配置VLANIF接口的…

window安装Redis服务

下载地址&#xff1a;Releases tporadowski/redis GitHub。 Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择&#xff0c;这里我们下载 Redis-x64-xxx.zip压缩包&#xff0c;解压后&#xff0c;将文件夹重新命名为 redis。 命令创建Redis服务 上述方式虽然…

王炸!ChatGPT这算是彻底打脸马云。。。

在2019年的世界人工智能大会上&#xff0c;马斯克和马云针对人工智能话题上演了一场精彩对话。马云&#xff1a;我不觉得AI是一种威胁&#xff0c;我不认为人工智能是很恐怖的东西&#xff0c;因为人类很聪明。马斯克&#xff1a;一般大家都会低估人工智能的能力&#xff0c;实…

便携式明渠流量计技术背景及应用

便携式明渠流量计 是一款对现有在线水监测系统中流量监测的对比装置。该便携式明渠流量计实现了比对在线系统的液位误差及流量误差。引导式的操作方式&#xff0c;可自动每两分钟记录一次液位数据&#xff0c;连续记录6次&#xff0c;同时可以累计测量10分钟的流量数据&#xf…

嘉立创EDA专业版PCB的DRC与生产输出

前期为了满足各项设计的要求&#xff0c;通常会设置很多约束规则&#xff0c;当一个PCB设计完成之后&#xff0c;通常要进行DRC。DRC就是检查设计是否满足所设置的规则。一个完整的PCB设计必须经过各项连接性规则检查&#xff0c;常见的检查包括开路及短路的检查&#xff0c;更…

数据库管理-第六十四期 试玩Oracle 23c免费开发者版(20230404)

数据库管理 2023-04-24第六十四期 试玩Oracle 23c免费开发者版1 环境2 操作系统配置3 安装数据库4 配置并启动数据库5 访问数据库总结第六十四期 试玩Oracle 23c免费开发者版 四月第一篇文章&#xff0c;今天正好Oracle放出了Oracle Database 23c Free - Developer Release&am…

Python 自动化指南(繁琐工作自动化)第二版:十六、使用 CSV 文件和 JSON 数据

原文&#xff1a;https://automatetheboringstuff.com/2e/chapter16/ 在第 15 章&#xff0c;你学习了如何从 PDF 和 Word 文档中提取文本。这些文件是二进制格式的&#xff0c;需要特殊的 Python 模块来访问它们的数据。另一方面&#xff0c;CSV 和 JSON 文件只是纯文本文件。…

Linux下C/C++ redis协议(RESP)解析

Redis是一个开源的内存键值数据存储&#xff0c;最常用作主数据库、缓存、消息代理和队列。Redis提供了亚毫秒的响应时间&#xff0c;在游戏、金融科技、广告技术、社交媒体、医疗保健和物联网等行业实现了快速而强大的实时应用。 Redis连续五年成为开发人员最喜爱的数据库。开…

从小到大排序-课后程序(JavaScript前端开发案例教程-黑马程序员编著-第4章-课后作业)

【案例4-1】 从小到大排序 一、案例描述 考核知识点 函数的定义与调用&#xff0c;参数传递 练习目标 掌握函数的定义与调用。掌握for循环数据处理逻辑 需求分析 给出一组数据&#xff0c;要求按照从小到大进行排序。 案例分析 效果如图4-1所示。从小到大排序 具体实现步骤…

Final Cut Pro for Mac(中文fcpx视频剪辑)

Final Cut Pro for Mac是一款专业的视频剪辑软件&#xff0c;由苹果公司开发并发布。Final Cut Pro for Mac v10.6.5中文版是最新版本&#xff0c;支持中文界面&#xff0c;为用户提供了更加便捷的操作体验。 使用Final Cut Pro for Mac&#xff0c;用户可以轻松地进行视频编辑…

哈希表(如何打造一个工业级的哈希表)

目录 哈希思想 哈希函数 哈希冲突 1.开放寻址法 2、链表法 解决装载因子过大的问题 选择合适的哈希冲突解决方法 哈希思想 哈希表(hashtable)是数组的一一种扩展&#xff0c;由数组演化而来&#xff0c;底层依赖数组支持按下标快速 访问元素的特性。换句话说&#xff0c;…

HTTP协议详解(二)

目录 1.HTTP 响应详解 1.1认识状态码(status code) 1.2 认识响应报头(header) 1.3 认识响应正文(body) 2.构造 HTTP 请求 2.1 通过form表单构造请求 2.2 通过ajax构造请求 2.3 使用第三方工具构造请求 开始之前我们先复习一下http协议格式 1.HTTP 响应详解 我们先抓包…

ChatGPT中文方式写作-chatgpt中文生成

ChatGPT是一种强大的自然语言处理技术&#xff0c;可以帮助人们进行各种语言任务&#xff0c;包括机器翻译、问答系统、自然语言生成等。在中文辅助写作上&#xff0c;ChatGPT也很有用武之地&#xff0c;下面我们将就如何通过ChatGPT实现中文辅助写作&#xff0c;提高文章质量和…

C语言预处理指令-宏定义、文件包含、条件编译

预处理指令简介 1.C语言在对源程序进行编译之前&#xff0c;会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令)&#xff0c;产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 2.为了区分预处理指令和一般的C语句&#xff0c;所有预处理…

计算机科班与培训开发编程的区别在哪里?

科班、培训班、科班培训班的模式都培养了很多编程技术人员进入IT行业&#xff0c;有的成为某个技术领域的专家&#xff0c;有的成为领导层&#xff0c;有的一直在默默无闻的敲代码等待35岁的到来。不管那种方式入行&#xff0c;这些类似的情况都存在&#xff0c;并且未来还会一…

全链路监控:方案概述

问题背景 随着微服务架构的流行&#xff0c;服务按照不同的维度进行拆分&#xff0c;一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上&#xff0c;这些软件模块&#xff0c;有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台…

java版工程项目管理系统-功能清单 图文解析

ava版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示1…
最新文章