이를 전환할 수 있는 스크립트(야간 모드 앱)를 만들려고 합니다 redshift
. 그래서 저는 이렇게 했습니다.
#!/bin/bash
pgrep redshift > /dev/null && \
killall redshift || \
setsid redshift [options] &> /dev/null
그러면 프로그램이 백그라운드에서 실행 중이면 종료되고, 그렇지 않으면 실행 중이 됩니다 setsid
. 이제 이 스크립트는 프로세스를 종료하면 작동하지만 다시 실행하면 스크립트가 중단됩니다.
- 내가 뭘 잘못했나요?
- 터미널을 종료해도 프로그램이 중지되지 않도록 프로세스를 백그라운드에 배치하는 다른 방법이 있습니까?
답변1
Bash를 사용하여 프로그램을 호출하면 Bash는 이를 &>
사용자가 원하는 것(백그라운드 연산자 및 stdout 리디렉션)이 아닌 특수 리디렉션 연산자(stdout 및 stderr 모두 &
리디렉션 )로 해석합니다 >
. 두 개의 태그를 분리하면 예상한 백그라운드 동작을 얻을 수 있습니다.
#!/bin/bash
pgrep redshift > /dev/null &&
killall redshift ||
setsid redshift [options] & > /dev/null
미래의 자신에게 좀 더 친절하게 대하고 논리를 조금 확장하는 것을 고려해보세요. 그것을 죽이고 싶다면 redshift
몇 가지 옵션을 사용하여 실행하세요.
if pgrep redshift > /dev/null
then
pkill redshift
fi
setsid redshift options & > /dev/null
답변2
redshift에는 전환 기능이 있습니다
전환하려면 신호 SIGUSR1을 적색편이 프로세스로 보냅니다.
pkill -USR1 redshift
기록이 있습니다그들의 웹사이트에서, 하지만 에는 없습니다소프트웨어 문서. 하나 열었어요풀 리퀘스트이 기능은 매뉴얼 페이지에 문서화되어 있습니다.
답변3
나는 Gnome에서 데스크탑 아이콘을 전환하는 데 사용합니다.
pkill nemo-desktop || nemo-desktop
물론 이것은 적색편이에도 적용된다.
pkill redshift || redshift