如何优雅的启动idea
setsid
-
若命令行直接运行idea.sh会在命令行输出idea的执行信息,当关闭命令行之后idea会被终止任务
-
使用setsid命令将此命令与其父进程断开连接,此时关闭命令行后idea就不会被终止
-
setsid /opt/idea-IU-211.7628.21/bin/idea.sh &> /dev/null
方法1:alias
-
每次输入这么长的代码肯定是麻烦的,于是我将这个长代码起了个别名
idea
,在这个命令执行之后,运行idea这个命令就相当于执行了上面这个长命令 -
但是每次关闭当前对话框后我起的别名就会消失,所以我将这句话添加到了
/etc/profile
文件的最后,这样每次启动系统就会自动执行此命令,我们只需要执行idea
就可以启动idea了 -
alias idea="setsid /opt/idea-IU-211.7628.21/bin/idea.sh &> /dev/null"
nohup、&、setsid、fork的区别
- SIGHUP,挂断。在用户终端连接结束时发出此信号。登录Linux时,系统会分配给登录用户一个终端(Session)。
-
以“&”方式后台运行的程序如果是一个终端的job,当终端结束时,终端会向它的所有job发送SIGHUP,这样以“&”方式运行的进程则会因为收到SIGHUP而退出
command &
-
nohup 命令忽略所有挂断(SIGHUP)信号。在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。要运行后台中的 nohup 命令:添加 & 到命令的尾部
nohup command > myout.file 2>&1 &
-
2>&1
:将错误输出重定向到标准输出 -
会产生僵尸进程:运行一个程序时,它会产生一个父进程以及很多子进程。 子进程完成执行后会发送一个 Exit 信号然后死掉,这个 Exit 信号需要被父进程所读取。父进程需要随后调用 wait 命令来读取子进程的退出状态,并将子进程从进程表中移除。若父进程正确读取了子进程的 Exit 信号,则子进程会从进程表中删掉。但若父进程未能读取到子进程的 Exit 信号,则这个子进程虽然完成执行处于死亡的状态,但也不会从进程表中删掉。
-
-
子进程从父进程继承了:会话、进程组和终端。setsid让一个进程脱离父进程:创建一个属于自己的会话、进程组、终端:
setsid xx.sh &> /dev/null
- 注意:代码中调用setsid时自己不能是进程组长,所以将被调用程序先执行
&
放到子进程,确保他不是组长。若其是组长则调用失败返回-1,调用成功返回会话ID
- 注意:代码中调用setsid时自己不能是进程组长,所以将被调用程序先执行
方法2:/usr/bin
- 写一个脚本文件包含
setsid /opt/idea-IU-211.7628.21/bin/idea.sh &> /dev/null
,然后把文件命名为idea后,放在/usr/bin目录下,也是可以实现在命令行输入idea
就可以启动idea的功能