procserv介绍

参考地址:procserv(1) - Linux man page (die.net)

名称

procServ:带Telnet console和日志访问的进程服务程序。

简介

procServ [OPTIONS] port command args ...

描述

procServ为一条命令(例如,一个软IOC)创建一个运行时环境。它分叉出一个作为进入后台的守护运行的服务程序,这创建一个子进行,它用来自命令行所有剩下args运行命令。这个服务程序通过在指定端口提供telnet连接为子进程提供console访问(stdin/stdout)。出于安全原因,默认访问被限制于来自本地(127.0.0.1)的连接,因而需要登录到主机上一个有效账户。

可以使用-L(--logfile)选项配置procServ写子进程所有输入和输出的console日志到一个文件。发送一个信号SIGHUP到这个服务器程序将使其重新打开这个日志文件。为了便于运行在一个中心console访问管理(如conserver),-l(--logport)选项再创建一个telnet端口,它默认是公共的(例如,被受限于localhost),并且提供对这个子进程console的只读日志访问。-r(--restrict)选项限制日志端口为本地,类似于访问端口。

访问和日志端口允许多个连接,它们被透明地处理:来自访问连接的所有输入被转发给这个子进程,来自这个子进程的所有输出被转发给所有访问和日志连接(并且被写入日志文件)。来自这个服务进程的所有诊断消息以"@@@"开头,明确地区别于来自子进程消息。为了提高可读性,一个由-n(--name)选项指定的名称将替换很多消息中的命令字符串。

当子进程终止时,服务程序默认自动再生产这个子进程。为了避免旋转,子进程重启之间最短时长需要保证(默认,15秒,可以使用-holdoff选项更改它)。使用转换命令^T,可以在线转换这种行为,使用--noautorestart选项可以更改默认。通过使用kill命令^X发送一个信号给子进程,你可以手动地重启一个正在运行地子进程。对于子进程被关闭了,服务程序接受两个命令:^R或^X重启这个子进程,和^Q退出服务程序。-w(--wait)选项选项启动在关闭模式中地服务程序,等待一个telnet连接来发送手动启动命令来创建子进程。

使用客户端的断开顺序,可以断开任何telnet连接(控制或日志)。通过发送登出命令字符,也可以断开控制连接,可以使用-x(--logoutcmd)选项指定那个字符。

要阻塞对子进程潜在危险的输入字符(例如,作用域软IOCs的^D和^C),可以使用-i(--ignore)选项指定在来自一个console访问端口时悄悄被忽略的字符。

为了便于作为标准系统服务被启动和停止,-p(--pidfile)选项告诉服务程序创建一个包含这个服务程序进程PID的标准PID文件。

-d(--debug)选项在调试模式运行服务程序:这个守护进程留在前台,打印所有正常日志内容和其它调试消息到stdout。

选项

1)--allow:允许来自任何地方的控制连接。(默认:限制控制访问于localhost)。如果子进程允许,创建了一个严重安全漏洞,由于来自任何地方的telnet客户端可以连接到子进程的stdin/stdout并且执行主机上任何命令。需要在编译时被使能(见Makefile)。除非你确切地知道你为什么正在做和你正在做什么,否则请不要使能和使用这个选项。

2)--autorestartcmd=char:切换当在访问连接上发送char时自动重启标志。使用^指定控制字符,""禁用。默认^T。

3) --coresize=size:设置core文件地最大尺寸。详见getrlimit文档。设置size为0将避免子进程创建core文件。

4)-c, --chdir=dir:在启动子进程前,切换dir的目录为dir。在子进程每次启动时,做这件事,确保在子进程重启时符号链接被解析。

5) -d, --debug:进入调试模式。调试模式将保持服务进程在前台,并且使能诊断消息将被发送给控制终端。

6) -e, --exec=file:为子进程以可执行文件运行file。默认时command。

7) -f, --foreground:保持服务进程在前台并且连接到控制终端。

8) -h, --help:打印帮助消息。

9) --holdoff=n:在子进程重启尝试之际爱你等待至少n秒。默认是15秒。

10) -i, --ignore=chars:忽略访问连接上再chars中所有字符。这可以用于子进程屏蔽来自潜在危险的输入字符,例如,关闭软IOC的^D和^C。使用^指定控制字符,^^指定单个^字符。

11) -k, --killcmd=char:当在一个访问连接上发送char时,杀死这个子进程(默认自动重启子进程)。使用^指定一个控制字符,""用于没有杀死命令。默认是^X。

12) --killsig=signal:当接受到这个kill命令时,使用signal杀死子进程。默认是9(SIGKILL)。

13) -l, --logport=port:在port上提供对子进程console的只读访问。默认,所有主机可以连接port,使用-r(--restrict)选项限制访问于localhost。

14) -L, --logfile=file:写一个所有输入和输出的console日志到file。

15) --logstamp[=fmt]:在日志中带时间戳的前缀行,设置时间戳格式字符串为fmt。默认是"[<timefmt>]"。(见--timefmt)选项。)

16) -n, --name=tile:在所有服务程序消息中,使用title替代完整命令行来增加可读性。

17) --noautorestart:退出时不要自动重启子进程。

18) -p, --pidfile=file:写服务进程的PID到file以便于集成到常规的系统服务管理机制中。

19)--timefmt=fmt:设置用于打印时间戳的格式字符串为fmt。默认是"%c"。(详见strftime)。

20) -q, --quiet:不要写信息输出(服务程序)。当作为系统脚本的一部分运行时,避免弄乱屏幕。

21) --restrict:限制日志连接于localhost。

22) -V, --version:打印程序版本。

23) -w , --wait:不要立即立即启动子进程。而是,等待telnet连接和手动启动命令。

24) -x, --logoutcmd=char:当在访问连接上发送char时,登出(关闭客户端连接)。使用哦个^指定控制字符。莫瑞诺是空。

用法

要使用procServ启动一个软IOC,更换到IOC的启动目录。一个代表性命令行是:

procServ -n "My SoftIOC" -i ^D^C 20000 ./st.cmd

要连接这个IOC,登录到这个软IOC的主机并且使用以下连接端口20000:

telnet localhost 20000

要从一个远程机器连接,ssh到procserhost上一个用户账号并且连接到端口20000:

ssh -t user@procservhost telnet localhost 20000

 你将连接到这个软IOCs console并且接收到一条信息欢迎消息。来自procServ服务器的所有输出将以"@@@"开头,使得能够区分来自你IOC发送的消息。

> telnet localhost 20000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
@@@ Welcome to the procServ process server (procServ Version 2.1.0)
@@@ Use ^X to kill the child, auto restart is ON, use ^T to toggle auto restart
@@@ procServ server PID: 21413
@@@ Startup directory: /projects/ctl/lange/epics/ioc/test314/iocBoot/iocexample
@@@ Child "My SoftIOC" started as: ./st.cmd
@@@ Child "My SoftIOC" PID: 21414
@@@ procServ server started at: Fri Apr 25 16:43:00 2008
@@@ Child "My SoftIOC" started at: Fri Apr 25 16:43:00 2008
@@@ 0 user(s) and 0 logger(s) connected (plus you)

输入杀死命令字符^X来重启这个软IOC,并且获取有关这个操作的服务程序消息。

输入telnet转义字符^]退回到一个telnet提示符,接着"quit"退出telnet(和ssh,当你正在远程连接时)。

虽然procServ原来是为了成为一个运行软IOCs的环境,但任何进程可以作为子进程被启动。它为需要访问其console的任何程序提供环境,在后台作为一个守护运行,并且通过写一个文件或者通过console访问和日志工具(诸如conserver)维护一个日志。

环境变量

PROCSERV_PID:设置写服务进程的PID所到的文件名。(见-p选项)。

PROCSERV_DEBUG:如果设置,procServ以调试模式启动(见-d选项)。

示例

在Ubuntu 22.04上,安装所需软件包:

apt-get install asciidoc
apt-get install libtelnet-dev
apt-get install telnet
apt-get install procserv

 创建一个简单的IOC应用程序,来进行测试:

数据库文件如下:

root@orangepi5:/usr/local/EPICS/program/softIoc# cat db/simpledb.vdb
record(waveform, "$(USER):wfin") {
  field(DESC, "A Example Waveform")
  field(SCAN, "Passive")
  field(NELM, "10")
  field(FTVL, "LONG")
}

record(stringin, "$(USER):StrIn") {
  field(DESC, "A Example StringIn")
  field(SCAN, "Passive")
  field(VAL, "HelloWorld")
  field(PINI, "YES")
}

启动文件脚本如下:

#!../../bin/linux-aarch64/softIoc

#- You may have to change softIoc to something else
#- everywhere it appears in this file

< envPaths

cd "${TOP}"

## Register all support components
dbLoadDatabase "dbd/softIoc.dbd"
softIoc_registerRecordDeviceDriver pdbbase

## Load record instances
dbLoadRecords("db/simpledb.vdb","USER=TEST")

cd "${TOP}/iocBoot/${IOC}"
iocInit

进入IOC的启动目录softIoc/iocBoot/iocsoftIoc执行以下命令:

root@orangepi5:/usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc#  procServ -n "My SoftIOC" -i ^D^C 20000 ./st.cmd
procServ: spawning daemon process: 147476
Warning: No log file and no port for log connections specified.

用本地telnet客户端进行连接:

root@orangepi5:/usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc# telnet localhost 20000
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
@@@ Welcome to procServ (procServ Process Server 2.7.0)
@@@ Use ^X to kill the child, auto restart is ON, use ^T to toggle auto restart
@@@ procServ server PID: 147476
@@@ Server startup directory: /usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc
@@@ Child startup directory: /usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc
@@@ Child "My SoftIOC" started as: ./st.cmd
@@@ Child "My SoftIOC" PID: 147477
@@@ procServ server started at: Thu Jul  4 20:38:30 2024
@@@ Child "My SoftIOC" started at: Thu Jul  4 20:38:30 2024
@@@ 0 user(s) and 0 logger(s) connected (plus you)

用远程主机进行访问:

(base) [blctrl@localhost ~]$ ssh -t orangepi@192.168.50.184 telnet localhost 20000
orangepi@192.168.50.184's password:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
@@@ Welcome to procServ (procServ Process Server 2.7.0)
@@@ Use ^X to kill the child, auto restart is ON, use ^T to toggle auto restart
@@@ procServ server PID: 147476
@@@ Server startup directory: /usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc
@@@ Child startup directory: /usr/local/EPICS/program/softIoc/iocBoot/iocsoftIoc
@@@ Child "My SoftIOC" started as: ./st.cmd
@@@ Child "My SoftIOC" PID: 147477
@@@ procServ server started at: Thu Jul  4 20:38:30 2024
@@@ Child "My SoftIOC" started at: Thu Jul  4 20:38:30 2024
@@@ 1 user(s) and 0 logger(s) connected (plus you)

通道访问测试:

root@orangepi5:~# caget TEST:StrIn
TEST:StrIn                     HelloWorld

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

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

相关文章

【Linux】高级IO——五种IO模型和基本概念 ,非阻塞IO,fcntl,实现非阻塞IO,同步通信和异步通信

文章目录 Linux高级IO1. 五种IO模型1.1 阻塞IO1.2 非阻塞IO1.3 信号驱动IO1.4 IO多路转接1.5 异步IO 2. 同步通信和异步通信3. 阻塞和非阻塞 Linux高级IO 1. 五种IO模型 IO是什么&#xff1f; IO是计算机领域中的缩写&#xff0c;指的是输入/输出&#xff08;Input/Output&…

【vue3|第15期】Vue3模板语法入门指南

日期:2024年7月2日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083…

上海网站建设如何做

上海是中国最繁华的城市之一&#xff0c;作为全国的经济、文化和科技中心&#xff0c;网站建设在上海变得越来越重要。如何做好上海网站建设&#xff0c;让网站更加吸引人&#xff0c;成为企业和个人宣传自身的重要平台呢&#xff1f; 首先&#xff0c;要有清晰的定位和目标。在…

IT之旅启航:高考后IT专业预习全攻略

✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点赞、关注、收藏、评论&#xff0c;是对我最大…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥生成介绍及算法规格】

密钥生成介绍及算法规格 当业务需要使用HUKS生成随机密钥&#xff0c;并由HUKS进行安全保存时&#xff0c;可以调用HUKS的接口生成密钥。 注意&#xff1a; 密钥别名中禁止包含个人数据等敏感信息。 开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin/harm…

Java实现电子围栏的小例子

主要需求是实现一个电子围栏判断的小例子其中包括前端和后端的demo代码 引入对应的依赖库 <!--jts库通常用于几何计算和表示地理空间数据--> <dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><…

web学习笔记(七十五)

目录 1.小程序修改响应式数据 1.1修改基本数据类型的值 1.2修改复合数据类型的值 2. 发送请求 3.小程序解决跨域问题 1.小程序修改响应式数据 1.1修改基本数据类型的值 在小程序中需要先将data中的数据拿过来并结构&#xff0c;才可以在this.setdata中修改数据&#xf…

2024攻防演练:亚信安全推出MSS/SaaS短期定制服务

随着2024年攻防演练周期延长的消息不断传出&#xff0c;各参与方将面临前所未有的挑战。面对强大的攻击队伍和日益严格的监管压力&#xff0c;防守单位必须提前进行全面而周密的准备和部署。为应对这一形势&#xff0c;亚信安全特别推出了为期三个月的MSS/SaaS短期订阅方案。该…

SpringBoot Task 定时任务

springboot中使用Task定时任务非常简单 springboot 中自带的都有注解不需要引入依赖 第一步&#xff1a;在启动类上添加启用定时任务注解 EnableScheduling //开启任务调度 第二步&#xff1a;创建一个springboot组件用于定时任务管理 package cn.lsy.api.Task;import cn.ls…

【LeetCode】十一、滑动窗口:长度最小的子数组 + 定长子串的元音最大数目

文章目录 1、滑动窗口2、leetcode209&#xff1a;长度最小的子数组3、leetcode1456&#xff1a;定长子串中元音的最大数目 1、滑动窗口 如下&#xff0c;有一个数组&#xff0c;现三个元素为一组&#xff0c;求最大的和&#xff0c;自然可以while循环实现&#xff1a;i 、i1、…

着色器预热?为什么 Flutter 需要?为什么原生 App 不需要?那 Compose 呢?Impeller 呢?

依旧是来自网友的问题&#xff0c;这个问题在一定程度上还是很意思的&#xff0c;因为大家可能会想&#xff0c;Flutter 使用 skia&#xff0c;原生 App 是用 skia &#xff0c;那为什么在 Flutter 上会有着色器预热&#xff08;Shader Warmup&#xff09;这样的说法&#xff1…

使用getline()从文件中读取一行字符串

我们知道&#xff0c;getline() 方法定义在 istream 类中&#xff0c;而 fstream 和 ifstream 类继承自 istream 类&#xff0c;因此 fstream 和 ifstream 的类对象可以调用 getline() 成员方法。 当文件流对象调用 getline() 方法时&#xff0c;该方法的功能就变成了从指定文件…

lnternet 发展史

一&#xff0c;lnternet 发展史 ARPA net &#xff08;上世纪50年代二战结束&#xff09; 无线 战场指挥通信协议落后 TCP/IP 包交换 WEB (70年代 ) 80年代 90年代 二&#xff0c;互联网的典型应用&#xff1a; 96年到2008年 第一代技术…

8.ApplicationContext常见实现

ClassPathXmlApplicationContext 基于classpath下xml格式的配置文件来创建 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-i…

Linux-页表如何对物理内存进行映射

1.1 页框和页帧 我们知道通过页表可以将虚拟内存映射到对应的物理内存&#xff0c;而操作系统对于物理内存的管理并不是以字节为单位的&#xff0c;而是将物理内存分为许多大小为4KB的块&#xff0c;称为页框或页帧&#xff0c;这就是为什么我们在创建共享内存是建议将大小设定…

【server】3、注册中心与配置中心

1、服务注册与发现 1.1、consul 1.1.1 是什么 官网&#xff1a; Consul by HashiCorp spring-cloud-consul: Spring Cloud Consul :: Spring Cloud Consul gitHub 官网 &#xff1a;GitHub - hashicorp/consul: Consul is a distributed, highly available, and data cent…

上海-灵曼科技(面经)

上海-灵曼科技 hr电话面 个人简介 个人信息的询问 是否知道芋道框架 技术面 算法题 14. 最长公共前缀&#xff08;写出来即可&#xff09; 聊一下Docker Docker核心概念总结Docker实战 聊一下AOP Spring AOP详解 聊一下JWT JWT 基础概念详解JWT 身份认证优缺点分析 Spri…

2024华为OD机试真题- 电脑病毒感染-(C++/Python)-C卷D卷-200分

2024华为OD机试题库-(C卷+D卷)-(JAVA、Python、C++) 题目描述 一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用 t 表示。 其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果…

Spzhi知识付费社区主题免费下载

主题介绍 用typecho打造一款知识付费社区主题&#xff0c;带会员功能&#xff0c;为内容创业者提供知识变现一站式解决方案&#xff0c;让用户沉淀到自己的平台&#xff0c;形成自己的私域流量池&#xff0c;打造流量闭环&#xff0c;零门槛搭建你的移动网络课堂 主题功能 支…

RpcChannel的调用过程

目录 1. RPC调用方&#xff08;caller&#xff09;的调用(消费)过程 2.在caller下创建文件&#xff1a;calluserservice.cc 3.在src的include下创建文件&#xff1a;mprpcchannel.h 4.在src下创建mprpcchannel.cc 1. RPC调用方&#xff08;caller&#xff09;的调用(消费)过…