首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Clojure中,如何向Clojure.java.shell/sh创建的进程发送退出命令

在Clojure中,可以使用Clojure.java.shell/sh函数创建进程,并且可以通过向进程发送退出命令来终止进程。

要向Clojure.java.shell/sh创建的进程发送退出命令,可以使用进程的输出流(:out)或错误流(:err)来发送命令。首先,我们需要使用Clojure.java.io/writer函数创建一个写入流,然后将其传递给进程的输入流(:in)。

下面是一个示例代码,演示如何向Clojure.java.shell/sh创建的进程发送退出命令:

代码语言:txt
复制
(require '[clojure.java.shell :refer [sh]])
(require '[clojure.java.io :as io])

(let [process (sh "ls")
      exit-command "exit\n"
      writer (io/writer (:in process))]
  (.write writer exit-command)
  (.flush writer)
  (.close writer)
  (sh "echo" "Process exited with code" (:exit process)))

在上面的示例中,我们首先使用sh函数创建了一个进程,该进程执行了ls命令。然后,我们定义了一个exit-command变量,其中包含了要发送给进程的退出命令。接下来,我们使用io/writer函数创建了一个写入流writer,并将其传递给进程的输入流(:in)。然后,我们使用.write方法将退出命令写入流中,使用.flush方法刷新流,最后使用.close方法关闭流。

通过以上操作,我们成功向进程发送了退出命令。最后,我们使用sh函数执行了echo命令,打印出进程的退出状态码。

请注意,上述示例中的命令仅用于演示目的。实际使用时,你需要根据具体的需求和命令来修改代码。

关于Clojure和Clojure.java.shell的更多信息,你可以参考以下链接:

  • Clojure官方网站:https://clojure.org/
  • Clojure.java.shell文档:https://clojure.github.io/clojure/clojure.java.shell-api.html
相关搜索:Babashka -如何将stdout从外部进程调用`clojure.java.shell/sh`路由到实际的stdout如何向C中的进程发送信号?如何向Kubernetes中运行的容器发送命令?如何使用react钩子将在子进程中创建的数据发送到父进程?在屏幕中,如何在单个屏幕会话中向所有虚拟终端窗口发送命令?在vscode的集成终端中运行命令后如何获取退出代码如何解决异常:Windows10中Java网关进程在发送端口号前已退出如何调用python脚本中的函数,然后在kill命令终止时退出?如何通过邮件发送在android/data中创建的文件?如何在moodle中向管理员发送“课程创建者”角色的请求?在Java中,子线程如何向主线程(方法)发送连续的消息?向新用户发送带有令牌的电子邮件以在Laravel中创建帐户如何确保在aspnetcore后台服务中启动的进程在web应用程序退出时终止。如何使用java在android中同时向1个以上的用户发送otp?如何向在控制器中抛出的异常发送messages.properties密钥?如何通过多进程模块创建的工作进程在python中组合动态生成的测试套件如何在nightwatch.js自定义命令中向浏览器堆栈发送正确的请求?如何利用arduino uno在一次数据包传输中向xbee路由器发送多条命令在Node JS中,如何解析命令来接收带有子进程的特定行如何在PostgreSQL中通过命令行获取仅转储函数创建和存储的进程脚本
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

在 Docker 容器中捕获信号

这些操作的本质都是通过从主机向容器发送信号实现主机与容器中程序的交互。比如我们可以向容器中的应用发送一个重新加载信号,容器中的应用程序在接到信号后执行相应的处理程序完成重新加载配置文件的任务。...容器中的信号 Docker 的 stop 和 kill 命令都是用来向容器发送信号的。注意,只有容器中的 1 号进程能够收到信号,这一点非常关键!...,执行命令: $ docker container kill --signal="SIGTERM" my-app 此时应用会以我们期望的方式退出: 应用程序不是容器中的 1 号进程 创建一个启动应用程序的脚本文件...它们最终都是向容器中的 1 号进程发送了 SIGKILL 信号。...很显然这不是我们期望的,我们希望程序能够收到 SIGTERM  信号优雅的退出。 在脚本中捕获信号 创建另外一个启动应用程序的脚本文件 app2.sh,内容如下: #!

2.7K20

Storm集群安装详解

本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章节以“注意事项”的形式给出。 1....每一个工作进程执行一个Topology的子集;一个运行中的Topology由分布在不同工作节点上的多个工作进程组成。...此外,Nimbus和Supervisor进程都是快速失败(fail-fast)和无状态(stateless)的;Storm集群所有的状态要么在Zookeeper集群中,要么存储在本地磁盘上。...在dataDir目录下创建myid文件,文件中只包含一行,且内容为该节点对应的server.id中的id编号。 5....(fail-fast)的,且遇到任何错误情况,进程均会退出,因此,最好能通过监控程序将Zookeeper管理起来,保证Zookeeper退出后能被自动重启。

1.9K10
  • 滚动 Docker 中的 Nginx 日志

    创建滚动日志的脚本 创建 rotatelog.sh 文件,其内容如下: #!...最后通过 kill 命令向 nginx master 进程发送 USR1 信号。...笔者这《在 docker 容器中捕获信号》一文中介绍了容器中信号的捕获问题,感兴趣的朋友可以去看看。在那篇文章中我们介绍了 docker 向容器中进程发送信号的 kill 命令。...我们可以通过命令: $ docker container kill mynginx -s USR1 向容器中的 1 号进程(nginx master)发送 USR1 信号(这种方式只能向 1 号进程发送信号...这种方式不需要通过 docker exec 命令在容器中执行命令,而完全在宿主机中完成所有的操作: 先重命名容器数据卷中的日志文件 给容器中的 1 号进程发送 USR1 信号 总结 相比之下我还是更喜欢第一种方式

    1.4K20

    面试官:能在容器里面通过 kill -9 杀死容器吗?问倒一大片。。。

    如果是后台进程,那么需要使用 kill 命令来终止(其实 Ctrl+C 也是kill命令)。 kill命令默认将信号(signal)15发给进程,让进程优雅地退出,释放资源。...而kill -9则是强制终止进程,相当于发送信号9,不管进程是否想要退出,都会被迫停止运行。...当然可以,docker kill 命令就是在容器外通过发送SIGKILL杀死容器的,因为在宿主机上,这个init进程的ID已经不再是 1 了。 那我们可以在容器内部通过信号杀死自己吗?...可以通过 docker ps 命令来获取当前正在运行的容器列表及其 ID。执行上述命令后,Docker 会向容器发送一个 SIGTERM 信号,请求它优雅地停止。...另外,也可以使用以下命令来直接强制停止容器: docker kill 这个命令会向容器发送一个SIGKILL信号,直接杀死该进程并终止容器。

    60410

    .NET Core 跨平台执行命令、脚本

    一.前言 我们可能会遇到需要在程序中执行一些系统命令,来获取一些信息;或者调用shell脚本。.NET Core 目前已经可以跨平台执行,那么它如何跨平台执行命令呢,请看下面的讲解。...arguments:在进程启动时传递给应用程序的命令行参数。 (2)主要属性 CreateNoWindow:指示是否在新窗口中启动进程。...Close:释放与此组件关联的所有资源。 CloseMainWindow:通过向其主窗口发送关闭消息来关闭具有用户界面的进程。 Kill:立即停止关联的进程。...Refresh:放弃已经在进程中缓存的关联进程的任何信息。 WaitForExit:等待关联进程退出,可以设置超时时间,如不设置则一直等待。...Exited:关联进程退出 三.在Windows OSX Linux 下执行命令 这里我选择.NET Core带的 dotnet --info输出.NET Core SDK&Runtime相关的信息。

    2K20

    docker与gosu

    在镜像中创建非root账号 既然不能用root账号,那就要创建其他账号来运行进程了,以redis官方镜像的Dockerfile为例,来看看如何创建账号,如下图,地址是:https://github.com...在Dockerfile脚本中未发现USER redis命令,这意味着执行docker-entrypoint.sh文件的身份是root; 其次,在docker-entrypoint.sh中没有发现su...,此时在宿主机向该容器发送信号量,收到信号量的是sudo进程。...而不是sudo; entrypoint.sh脚本在执行的时候也是个进程,启动业务进程的时候,在命令前面加上exec,这样新的进程就会取代entrypoint.sh的进程,得到1号PID; exec "$...如何在镜像中安装gosu 前面的redis例子中,我们看到docker-entrypoint.sh中用到了gosu,那么是在哪里安装了gosu呢?

    4K51

    Tomcat 优雅关闭之路

    ,深入分析不同的Tomcat关闭方式背后的原理,让开发人员能够了解在使用不同的关闭方式时需要注意的点,避免因JVM进程异常退出导致的各种非预见性错误。...2、服务器上,我们还可以利用kill -x命令来结束Tomcat进程。...比如我们平常开发过程中,常用的创建线程池的操作Executors.newFixedThreadPool(n) 便会创建n个用户线程,这些线程在main主线程退出后,并不会自动回收,从而阻止了JVM的正常退出...四、kill -x 1、kill -9 or kill -15 Linux中的kill -x操作是向目标进程发送对应的信号量。可以用kill -l命令查看每个数值所代表的信号量的值。...kill -15是向进程发送一个TERM的中断信号量,在JVM接收到该信号量后,会响应中断,进而结束当前进程。

    3.7K20

    golang子进程的启动和停止,mac与linux的区别

    简单调试后就找到了原因,在系统中启动的子进程,发出终止信号之后居然仍在运行,导致父进程也一直无法退出,尴尬了。...而发出退出命令的时候,只有sh退出了,sleep进程仍然继续运行。对比同样的mac电脑上,sh进程是没有出现的,只有一个sleep进程,所以发出退出命令的时候,sleep正常关闭,系统表现正常。...程序,在linux上也只有sleep这一个进程被建立,直接向其发出退出指令是可以正常工作的。...最后再说一下命令cmd.Process.Signal,golang文档上说的很清楚,这是向进程发送消息信号,比如同样的syscall.SIGQUIT,这也是告诉子进程退出的意思。...sh启动了另外一个子进程,这种方法就无效了(指在linux无效,mac测试是一样可以用的,关键区别同样是在mac,/bin/sh进程不会保留并等待我们启动的子进程退出,所以退出消息可以正常的发送到正常的子进程

    4.7K50

    容器应用优雅关闭的终极大招

    目前业务系统组件众多,互相之间调用关系也比较复杂,一个组件的下线、关闭会涉及到多个组件 对于任何一个线上应用,如何保证服务更新部署过程中从应用停止到重启恢复服务这个过程中不影响正常的业务请求,这是应用开发运维团队必须要解决的问题...所以在容器应用中如果应用容器中启动 shell,占据了 pid=1 的位置,那么就无法接收 k8s 发送的 SIGTERM 信号,只能等超时后被强行杀死了。...所以在容器应用中如果应用容器中启动 shell,占据了 pid=1 的位置,那么就无法接收 k8s 发送的 SIGTERM 信号,只能等超时后被强行杀死了。...在传统的部署模式下,这部分工作可能需要人工处理,但是在 K8s 容器平台中,K8s 的 Pod 删除默认就会向容器中的主进程发送优雅停机命令,并提供了默认 30s 的等待时长,若优雅停机处理超出 30s...tini 和 dumb-init 会将关闭信号向子进程传递,但不会等待子进程完全退出后自己在退出。而是传递完后直接就退出了。

    2.8K41

    Docker容器中进程管理工具

    Linux系统中,PID为1的进程需要担任两个重要的使命: 传递信号给子进程 如果pid为1的进程,无法向其子进程传递信号,可能导致容器发送SIGTERM信号之后,父进程等待子进程退出。...此时,如果父进程不能将信号传递到子进程,则整个容器就将无法正常退出,除非向父进程发送SIGKILL信号,使其强行退出,这就会导致一些退出前的操作无法正常执行,例如关闭数据库连接、关闭输入输出流等。...接管孤儿进程,防止出现僵尸进程 如果一个进程中A运行了一个子进程B,而这个子进程B又创建了一个子进程C,若子进程B非正常退出(通过SIGKILL信号,并不会传递SIGKILL信号给进程C),那么子进程C...在docker中,docker stop命令会发送SIGTERM信号给容器的主进程来处理。...类似于一个初始化系统, 它充当PID 1,并立即以子进程的形式允许您的命令,注意在接收到信号时正确处理和转发它们 dumb-init 解决上述两个问题:向子进程代理发送信号和接管子进程。

    1.3K30

    Linux:如何在脚本开发中实现程序在用户退出后仍保持运行

    在Linux环境下进行脚本开发时,常常需要自主管理进程,确保某些关键程序在用户退出后仍能继续运行,而不依赖于systemd这样的进程管理工具。本文将探讨如何通过其他方法实现这一目标。.../my_script.sh > my_script.log 2>&1 & 使用disown命令 disown命令可以将一个已经在后台运行的作业从当前的Shell作业列表中移除,这样在用户退出时,该作业也不会被发送.../my_script.sh & disown 使用setsid命令 setsid命令可以创建一个新的会话并将程序置于该会话中,确保程序与当前终端脱离关系。 sh setsid ..../my_script.sh & 使用tmux或screen工具 tmux和screen是两个流行的终端复用工具,它们可以创建一个持久的会话,在会话中运行的程序不会因为用户退出而终止。...它的主要优点包括: 会话管理:tmux 可以创建、分离和重新连接会话,使得程序可以在不同的会话中独立运行而不会因为终端关闭而中断。

    45410

    docker | dockerfile最佳实践

    真实的情况要远比这三条规律复杂,好在 docker 给出了官方的解释,如下图所示: 容器的优雅退出 众所周知,docker容器本质上是一个个进程,进程的优雅退出需要考虑的是如何正确处理 SIGTERM...信号,关于这点在我的另一篇博文中介绍过 kill命令详解以及linux中的信号 无论是 docker stop 还是在 kubernetes 中使用容器,一般关闭容器都是向容器内的 1 号进程发送 SIGTERM...信号,等待容器自行进行资源清理等操作,等待时间 docker 默认 10s,k8s 默认 30s,如果容器仍未退出,则发送 SIGKILL 信号强制杀死进程 综上,我们只需要考虑 2 点 应用程序如何处理信号...这就需要在应用程序中定义对信号的处理逻辑了,包括对每个信号如何处理如何转发给子进程等。...Tini 可以确保容器中的应用程序在启动和退出时正确处理信号,避免僵尸进程和其它常见问题的出现。

    1K10

    docker stop 或者 docker kill 不能停止容器

    -xe -u docker 然后在短暂的时间内 docker ps查看到的容器还在运行中,过了一会没有了我们在创建的时候会提示这个容器已经存在(如果建立同样名称的容器) docker stop 主流程...1,docker 通过 containerd 向容器主进程发送 SIGTERM(终止进程)信号后等待一段时间后(默认是10s,可以通过-t 参数来修改),如果从containerd 收到了容器退出消息...但是对于容器来说,init 系统进程并不是必须的,所以当我们停止容器的时候,docker 通过 containerd 向容器Pid 为 1 的进程发送 SIGTERM信号并不一定会被采纳。...在上一步中如果等待超时,Docker引擎将跳过 containerd 自己亲自动手通过kill系统调用向容器主进程发送 SIGKILL 信号。...一般情况下,父进程应该立即调用 wait(), 以防僵尸进程时间过长。 如果父进程在子进程之前退出,子进程会变成孤儿进程, 它的父进程会变成 PID 1。

    4.4K20

    Python 执行系统命令

    system函数可以将字符串转化成命令在服务器上运行;其原理是每一条system函数执行时,其会创建一个子进程在系统上执行命令行,子进程的执行结果无法影响主进程。...在一些复杂场景中,我们需要将一个进程的执行输出作为另一个进程的输入。在另一些场景中,我们需要先进入到某个输入环境,然后再执行一系列的指令等。...3、Popen.communicate(input=None):与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。...注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。...4、Popen.send_signal(signal):向子进程发送信号。 5、Popen.terminate():停止(stop)子进程。

    1.7K10

    docker stop 或者 docker kill 不能停止容器

    -xe -u docker 然后在短暂的时间内 docker ps查看到的容器还在运行中,过了一会没有了我们在创建的时候会提示这个容器已经存在(如果建立同样名称的容器) docker stop 主流程...1,docker 通过 containerd 向容器主进程发送 SIGTERM(终止进程)信号后等待一段时间后(默认是10s,可以通过-t 参数来修改),如果从containerd 收到了容器退出消息...但是对于容器来说,init 系统进程并不是必须的,所以当我们停止容器的时候,docker 通过 containerd 向容器Pid 为 1 的进程发送 SIGTERM信号并不一定会被采纳。...在上一步中如果等待超时,Docker引擎将跳过 containerd 自己亲自动手通过kill系统调用向容器主进程发送 SIGKILL 信号。...一般情况下,父进程应该立即调用 wait(), 以防僵尸进程时间过长。 如果父进程在子进程之前退出,子进程会变成孤儿进程, 它的父进程会变成 PID 1。

    7.5K82

    【管理工具】进程管理工具Supervisor(送书活动)

    Supervisor的服务器端称为supervisord,主要负责在启动自身时启动管理的子进程,响应客户端的命令,重启崩溃或退出的子进程,记录子进程stdout和stderr输出,生成和处理子进程生命周期中的事件...可以在一个配置文件中配置相关参数,包括Supervisord自身的状态,其 管理的各个子进程的相关属性。配置文件一般位于/etc/supervisord.conf。...(用于接收进程管理命令) supervisorctl #客户端(用于和守护进程通信,发送管理进程的指令) echo_supervisord_conf #生成初始配置文件程序 创建配置文件 一般可以通过运行.../bin/catalina.sh run ; 程序启动命令 autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出...;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程 killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程 [include]

    1.5K20

    nohup 命令 解决 SSH关闭窗口,程序也中断的问题!

    原因 主要元凶: 挂断信号(SIGHUP) 信号 概念介绍 在Linux/Unix中,有这样几个概念: 进程组(process group): 一个或多个进程的集合,每一个进程组有唯一一个进程组ID,即进程组长进程的...一个进程退出导致一个孤儿进程组产生时, 如果任意一个孤儿进程组进程处于STOP状态, 发送 SIGHUP 和 SIGCONT 信号到该进程组中所有进程....如何解决方案 在远端开启 tmux , 在 tmux 里运行程序, 此时运行的程序属于 tmux 的进程组, 不属于 ssh 进程组....使用 nohup 命令 Linux nohup 命令 nohup 英文全称 no hang up(不挂起),用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行。...nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out 的文件到当前目录下,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中

    6.3K20

    Python大数据之PySpark(二)PySpark安装

    ,从节点的主机名和端口号 3-现象:进入到spark-shell中或pyspark中,会开启4040的端口webui展示,但是一旦交互式命令行退出了,wenui无法访问了,需要具备Spark的历史日志服务器可以查看历史提交的任务...Driver,告诉任务需要多少cpu或内存 Worker进程负责干活, 向Master汇报状态, 并听从程序Driver的安排,创建Executor干活 在Worker中有Executor,Executor...步骤: 如果使用crt上传文件一般使用rz命令,yum install -y lrzsz 1-在3台虚拟机上准备anconda 2-安装anaconda,sh anaconda.sh 3-安装pyspark...#driver申请作业的资源,会向--master集群资源管理器申请 #执行计算的过程在worker中,一个worker有很多executor(进程),一个executor下面有很多task(线程)...在阶段划分完成和Task创建后, Driver会向Executor发送 Task; 3)、Executor在接收到Task后,会下载Task的运行时依赖,在准备好Task的执行环境后,会开始执行Task

    2.7K30

    书中关于伪终端的一个纰漏

    当 slowout 结束时,子进程读伪终端主设备时返回 0,它知道工作进程结束后,也即将结束自己的工作, 但是父进程一直卡在读终端输入上,并不知道工作进程已经退出,于是 pty 子进程向父进程发送一个...同理,当 pty 父进程检查到 stdin 上无更多输入后,会向 pty 子进程发送 SIGTERM 信号(前提是子进程未发送相同信号),从而终结子进程的等待 。...作者认为问题出现在 pty 父进程向 pty 子进程发送的这个 SIGTERM 信号上,因为重定向到 /dev/null 后,pty 父进程会从 stdin 读到 EOF, 从而向 pty 子进程发送.../slowout 可以通过 ps 命令观察到卡死的进程,7650 为 pty 子进程,7649 为 slowout 子进程,7648 为 pty 父进程已退出。...4 6 resp=$(read -p "type any char to continue") 7 } 如果使用 slowout.sh 作为工作进程,启动命令也需要改变一下: >.

    45720
    领券