在 linux 服务器上自动运行 "java -jar MyJar.jar",而不是在登录时从 ssh 运行
如何在Linux服务器上自动运行Java .jar文件,fx" Java -jar myjar.jar",每次我登录并从SSH运行时? 时 我正在寻找一种自动执行该命令的方法,或者要执行该命令. 另外,如何将所有输出引导到某些日志文件? (我猜AutoStrt中的STDIO不可用.) 解决方案 您可以使用端子挂钩,例如请参阅此答案bashrc .当您在服务器上进行登录或打开新终端时,脚本将运行并执行您的脚本. 其他解决方案 由于您引用了" SSH",我会猜您在 *Nix上. 看看cron *nix中的重定向输出很容易,只需使用">"和" 2>"重定向.
22 2024-04-22
编程技术问答社区
为什么我不能找回我的被暂停的程序,而这些程序是在回文里面的?
我创建了一个程序,该程序列出了一系列参数,并将它们放在新的TTY上,我可以四处走动并从中选择我想要的东西. 当我在没有这样的背景的情况下运行程序... $> ./ft_select arg_1 arg_2 ... arg_N 打开了一个新的TTY并显示了一个网格... arg_1 arg_2 arg_3 arg_4 arg_5 arg_6 arg_7 ... arg_N i点击 ctrl+z ,并且该程序毫无问题地暂停,fg命令将其放回. 我的问题是,当我将命令放在背景之间,然后尝试将其暂停时,它会被卡住而不会放回提示. 我必须提到我在/dev/tty> 上写下了网格的所有内容 您可以在执行信号处理的函数下方的代码中找到. 23 void signalhandler(int sig) 24 { 25 // struct winsize ws; 26 27 if (sig == SIGWINCH)
6 2024-04-10
编程技术问答社区
在Ubuntu下从串口读和写USB刻度
我有一个通过USB连接到Ubuntu笔记本电脑的数字秤,我想从中阅读测量结果. 串行协议非常简单(9600,8N1,TTYUSB0),我能够使用终端的Putty(VT100+)正确读取测量值. 秤需要接收命令 "READ" 为了发送测量. 每个测量都有此格式: 01ST,GS, 2.5,kg 例如,我正在测量2.5公斤的负载. 现在,我正在尝试从C应用程序发送读取命令,但我无法获得任何答案. #include #include #include #include #include #include #include int set_interface_attribs(int fd, int speed) { struct termios tty;
20 2024-04-10
编程技术问答社区
串行端口读取未完成
因此,下面的功能用于读取Linux下串行端口的数据.调试时我可以阅读完整的数据,但是当我启动程序时, read_buffer 似乎还没有完成.我正确地收到了数据的一小部分,但缓冲区的其余部分完全为零.有什么问题? int8_t __serial_port_open(uint8_t *port) { mode_t perms = S_IRWXU; fd = open(port, O_RDWR | O_NOCTTY | O_SYNC, perms); if (fd
20 2024-04-09
编程技术问答社区
编程Linux串口,ttyS0
我正在尝试学习如何使用C中的Linux中的TTYS0串行端口进行编程.我将另一台计算机连接到我的串行端口,每两秒钟约每两秒钟发送5F和6F的交替的十六进制值.我已经使用其他端口监视应用程序验证了这些值在端口上出现.在我的代码中,我将blocking 读()用于10个字符长度缓冲区.即使我的另一台机器仍在发送数据, read()块永远.如果我包括 fcntl(fd,f_setfl,fndelay); 将read()设置为nonblocking read()总是以-1的值返回,则表示UART BUFFER中没有数据,而我的"循环代码"只是打印出缓冲区中的随机值.因此,简而言之,我的假设是我的代码没有读取TTYS0,我不知道为什么.以下是我的代码,希望有人会看到是什么原因引起了我的问题,并使我保持直率.顺便说一句,我正在使用Scientific Linux,我相信TTYS0是COM端口1,就像在Redhat和Fedora一样.下面是我运行代码时的输出.它似乎没有任何问题写给COM端口,但是对于
10 2024-04-08
编程技术问答社区
Linux串行端口的正确初始化顺序
我编写了一个必须在Linux上使用串行端口的应用程序,尤其是TTYUSB的端口.阅读和写作操作是使用标准选择()/read()loop和write()执行的,并且可能没有错,但是初始化代码(或缺少其中的某些部分)会损害TTY子系统中的某些内容.在这里是: vuxboot(string filename, unsigned baud = B115200) : _debug(false) { _fd = open(filename.c_str(), O_RDWR | O_NOCTTY); if(_fd
6 2024-04-08
编程技术问答社区
你能用pty做什么?
阅读了各种资源,包括 http://wwww.linusakesson.net/programming/tty/ 我仍然对伪末端的结构和使用感到困惑和好奇 在Linux终端(bash而非TTY)中,我们有三个流: stdin stdout stderr 每个文件都有一个文件描述符. 这些文件描述符映射到流文件*. 例如,我们可以使用fileno()和fdopen()在它们之间切换. 我该怎么做? 我通常会想到stdout,stdin和stderr与过程相关联. 我认为说有一个与PTY相关的Stdout,Stdin和Stderr是不正确的. 因此,鉴于PTY(对于像Bash而不是其PID这样的过程),您如何获得它们并将它们连接到bash意义上的终端? 单个文件描述符(对于PTY)如何映射到三个流? (显然不是) 它可以以某种方式映射到一个过程吗? 使用optpty()时,我认为要在主和从终端上连接 processes 您需要为stdin,stdout
8 2024-04-07
编程技术问答社区
当从串口读取时,如何实现read()的超时(C/C++)?
我使用文件描述符和posix/unix read()函数从C ++中的串行端口读取字节.在此示例中,我正在从串行端口读取1个字节(为了清楚起见,省略了Baud Rate设置和Similiar): #include #include #include int main(void) { int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY); char buf[1]; int bytesRead = read(fd, buf, 1); close(fd); return 0; } 如果连接到/dev/ttys0的设备未发送任何信息,则该程序将悬挂.我该如何设置超时? 我尝试过这样的时间: struct termios options; tcgetattr(fd, &options); options.c_cc[VMIN] = 0; op
16 2024-04-07
编程技术问答社区
编写假装是TTY的程序
我正在编写一个程序,该程序读取来自stdin的输入,操纵输入,并将输出写入Stdout.但是,许多程序检查stdin是终端还是管道(通过调用 isatty ),并以不同的方式生成输出.我如何假装自己是TTY? 该解决方案应在Linux和MacOS上使用.任何生成独立二进制的编程语言都是可以接受的,但GO是首选. 请注意,我要问一个编程问题,而不是要求工具.因此,script或unbuffer之类的东西不是我在寻找的东西. 解决方案 以下是在PTY中运行命令并捕获其输出的完全工作代码. (不像您想象的那样多.) #include #include #include #include #include pid_t child = 0; void sighandler(int signum) { if (child > 0) { killpg(
12 2024-04-06
编程技术问答社区
pty和tty是什么意思?
我注意到在某些开源项目中有很多提到pty和tty,有人可以告诉我它们是什么意思,它们之间有什么区别? 解决方案 tty最初表示" Teletype" 和"pty"表示" pseudo-teletype" .. 在Unix中,/dev/tty*是任何像" Teletype" 的设备,即:终端. (称为电视,因为那是我们在那些持久时代的终端所拥有的.) a pty是A pseudotty ,一种设备条目,就像该过程读取和写作的终端一样,但由其他东西管理.他们首先出现(我记得)x窗口和屏幕等,在这里您需要像终端但可以从另一个程序中使用的东西. 其他解决方案 a tty是A 终端(它代表 teletype - 原始终端使用线路打印机进行输出和输入键盘!).终端基本上只是一个使用文本进行输入和输出的用户界面设备. a pty是A pseudo -terminal - 它是一种软件实现,像终端一样出现在附件的程序中,而是与"真实"终端直接通信,而是转移输入并输出到另
8 2024-04-06
编程技术问答社区
*nix的伪终端是如何工作的?什么是主/从通道?
我想在Linux系统上在C上编写一个简单的,愚蠢的X终端模拟器. 首先,我只是认为我必须弹出一个外壳并显示其输出. 我检查了XTERM和RXVT代码,看起来更复杂. 首先,我必须打开一个带有露天的伪末端.因此,我查看了男人页面,并看到opentty填充了2个文件描述符,主人和从属. 由于这些特殊文件的系统依赖性 - 我了解术语:这只是有关终端逃生代码的一堆信息. 我真正没有得到的是:我该如何处理主/从文件描述符? 一个示例程序,打开终端,登录,在外壳上执行" LS"会很棒. (英语不是我的母语,请原谅我的最终错误) 编辑: 这是我想到的示例代码: #include #include #include #include #include #include #include void safe_print (c
6 2024-04-06
编程技术问答社区
在Linux上用C语言读写串口
我正在尝试使用FTDI 在USB端口上发送/接收数据,因此我需要使用C/C ++处理串行通信.我正在研究 linux (ubuntu). 基本上,我已连接到正在侦听传入命令的设备.我需要发送这些命令并阅读设备的响应.命令和响应都是 ascii字符. 使用GTKTEMT一切正常,但是当我切换到C编程时,我会遇到问题. 这是我的代码: #include // standard input / output functions #include #include // string function definitions #include // UNIX standard function definitions #include // File control definitions #include
14 2024-04-06
编程技术问答社区
如何在使用boost::asio发送数据时将其丢弃?
我正在编写一些使用boost::asio类读取并写入串行设备的代码.但是,当程序之间发送几个字符串时,我注意到在接收程序上,数据将按顺序读取,因为它将其写入串行端口,而不是从其他程序发送的数据时 - 如果我开始阅读几秒钟后的数据,我没有得到目前发送的值,而是以前发送的值.我假设这是由于如何设置boost::asio::serial_port: 引起的 int main(int argc, char const *argv[]){ int baud=atoi(argv[1]); std::string pty=argv[2]; printf("Virtual device: %s\n",pty.data()); printf("Baud rate: %d\n",baud); boost::asio::io_service io; boost::asio::serial_port port(io, pty); port.set
6 2024-04-02
编程技术问答社区
将非ASCII字符写入tty上的程序的stdin中(通过ssh)。
我将SSHD带入远程服务器,并带有一些二进制挑战. 在某一时刻,它要求我输入文本.我知道它正在使用fgets()来读取stdin,并且我可以将其复制到并覆盖附近变量的位置. 问题是我不知道如何键入所需的地址值\x84和\x04等.如果我能够使用bash,我将echo -ne "\x84"或使用C HEX数组,但是我可以在这里做这种事情. 我尝试使用十六进制对ASCII转换器并复制二进制字符,并使用期望脚本发送二进制值,但都有相同的问题. X84添加了额外的字符,X04根本不会写. 任何想法是可靠地将值写入内存的最佳方法,而在unix tty上通过ssh无法表示的内存? 解决方案 对于高字符,您可以复制/粘贴. 例如. echo -ne "\x84" | xclip -i,如果您的桌面也在运行Linux,则在终端模拟器中单击中单击. (或也许不是,请参见下文).或echo ... | ssh user@host可以工作. ssh -T或任何其他终
18 2024-03-30
编程技术问答社区
在一个脚本中,如何使用ttyecho获得生成的终端的pid,并在其中执行命令?
我正在使用ttyecho(可以使用yay -S ttyecho-git安装)在单独的终端中执行命令: urxvt & sudo ttyecho -n /proc//fd/0 它不起作用,因为/proc/pid of-new-urxvt/fd/0是指向父终端的/dev/pts/x的符号链接. 在产卵的URXVT中,我碰巧运行了ZSH.因此,如果我使用该ZSH过程的PID,则可以工作: sudo ttyecho -n /proc//fd/0 当我运行urxvt &>时,如何在新的URXVT进程中产生新的ZSH进程的PID?还是有其他解决方案可以实现相同的结果? 解决方案 pgrep -P 给出了儿童ZSH过程的PID. THX到 @user1934428用于集思广益 这是结果的bas
8 2024-03-29
编程技术问答社区
我如何解决bash的错误-/dev/tty 没有这样的设备或地址?
作为问题的细节,我在执行bash脚本 时会遇到此错误 确切的术语我会遵循错误 bash: line 26: /dev/tty: No such device or address bash: line 29: /dev/tty: No such device or address 这分别是脚本中的第26行和第29行,这会导致问题 read -e -p "Paste the links : " links 之外,我不想在保存本地保存或以其他方式执行脚本后运行脚本. ls -l/dev/tty返回以下 crw-rw-rw-
64 2024-03-28
编程技术问答社区
使用pexpect/bash时防止换行
执行以下脚本(简化示例)时: #!/usr/bin/env python import pexpect spawn = pexpect.spawn('/bin/bash') with open('/tmp/logfile.log', 'w') as f: spawn.logfile_read = f spawn.sendline('echo "Hello I am a really long command, in fact I am 100 characters long! Potato Potato Potato....."') spawn.sendline('exit') spawn.expect(pexpect.EOF) 我在日志中出现的字符^M字符时遇到麻烦.现在的pexpect logfile现在看起来像这样: bash-3.2$ echo "Hello I am a really long command, in fact I
6 2024-03-28
编程技术问答社区
如何在执行的程序崩溃后重置tty?
我在Docker和nsenter上写了一个红宝石包装.我的工具提供的命令之一是在容器内启动bash壳.目前,我这样做: payload = "sudo nsenter --target #{pid(container_name)} --mount --uts --ipc --net --pid -- env #{env} /bin/bash -i -l;" Kernel.exec(payload) 在ruby中a>依赖于exec(2) syscall,因此没有叉子. 一个问题是,该容器有时会过早地死亡,从而有效地杀死了我新创建的bash提示.然后,我恢复了最初用于运行Ruby工具的提示,但是我看不到我的输入了,TTY似乎破裂并有效地解决了问题. 如果程序i执行崩溃,我想有条件地运行reset.我发现以下效果很好: $ ./myrubytool || reset 除非我想避免强迫人们每次使用我的工具添加|| reset 我尝试了以下内容: parylo
6 2024-03-28
编程技术问答社区
我怎样才能在超时的情况下读取tty文件?
我在/dev中有TTY设备,我在命令处发送.我想逐行阅读并在超时后停止读取文件. 解决方案 您可以使用程序stty配置TTY设备.要查看终端/dev/ttys0的设置,请尝试 stty -a -F /dev/ttyS0 有关超时的默认设置为min = 1; time = 0,这意味着阅读程序将读取至少一个字符,并且没有超时.使用例如 stty -F /dev/ttyS0 min 0 time 10 阅读程序(例如cat)将在一秒钟后完成阅读,无论是否读取任何内容.参数time的单元是十分之一;您可以查看man stty以获取更多信息. 其他解决方案 从在这里,您可以具有以下方式的脚本 #!/bin/bash #SPECIFYING THE SERIAL PORT SERIAL=ttyS0 #SETTING UP AN ERROR FLAG FLAG="GO" #OPENING SERIAL PORT FOR READING exec 99
6 2024-03-28
编程技术问答社区