CentOS7 uwsgi重启(通过shell脚本获取进程号并kill)

CentOS7 uwsgi重启(通过shell脚本获取进程号并kill),第1张

uWSGI 通过 xxxini 启动后会在相同目录下生成一个 xxxpid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。

启动:

uwsgi --ini xxxini

重启:

uwsgi --reload xxxpid

停止:

uwsgi --stop xxxpid

以上是当前网上对于uwsgi重启 *** 作的最常见的描述,但是笔者通过ini文件启动时发现并没有生成xxxpid文件。于是自然的想法是通过shell脚本获取进程号并进行kill *** 作,脚本如下:

获取进程号的命令需要包含在``或$()之间,笔者在此过程中遇到过两个问题,描述如下:

中变量未加双引号,加上双引号该问题解决。

先来说一下主要以下有几种方式:

fork 是最普通的, 就是直接在脚本里面用 path/to/foosh 来调用

foosh 这个脚本,比如如果是 foosh 在当前目录下,就是 /foosh 。运行的时候 terminal 会新开一个子 Shell 执行脚本 foosh,子 Shell 执行的时候, 父 Shell 还在。子 Shell 执行完毕后返回父 Shell。 子 Shell 从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回父 Shell。

exec 与 fork 不同,不需要新开一个子 Shell 来执行被调用的脚本 被调用的脚本与父脚本在同一个 Shell 内执行。但是使用 exec 调用一个新脚本以后, 父脚本中 exec 行之后的内容就不会再执行了。这是 exec 和 source 的区别

与 fork 的区别是不新开一个子 Shell 来执行被调用的脚本,而是在同一个 Shell 中执行 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用。

其实从命名上可以感知到其中的细微区别,下面通过两个脚本来体会三种调用方式的不同:

第一个脚本,我们命名为 1sh :

第二个脚本,我们命名为 2sh :

注:这两个脚本中的参数 $$ 用于返回脚本的 PID , 也就是进程 ID。这个例子是想通过显示 PID 判断两个脚本是分开执行还是同一进程里执行,也就是是否有新开子 Shell。当执行完脚本 2sh 后,脚本 1sh 后面的内容是否还执行。

chmod +x 1sh 2sh 给两个脚本加上可执行权限后执行情况:

fork 方式可以看出,两个脚本都执行了,运行顺序为1-2-1,从两者的PID值(1sh PID=82266, 2sh PID=82267),可以看出,两个脚本是分成两个进程运行的。

exec 方式运行的结果是,2sh 执行完成后,不再回到 1sh。运行顺序为 1-2。从pid值看,两者是在同一进程 PID=82287 中运行的。

source方式的结果是两者在同一进程里运行。该方式相当于把两个脚本先合并再运行。

参考:

用ShellExecuteExW API传SHELLEXECUTEINFOW结构体的值来启动应用程序GetProcessId(ShExecInfohProcess);

就能获取启动应用程序的PID了。

以上就是关于CentOS7 uwsgi重启(通过shell脚本获取进程号并kill)全部的内容,包括:CentOS7 uwsgi重启(通过shell脚本获取进程号并kill)、在 Shell 脚本中调用另一个 Shell 脚本的三种方式、如何获取打开文件的进程的pid等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9758693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存