How to get PID of background process?


I start a background process from my shell script, and I would like to kill this process when my script finishes.

How to get the PID of this process from my shell script? As far as I can see variable $! contains the PID of the current script, not the background process.



  • $$ is the current script's pid
  • $! is the pid of the last background process

Here's a sample transcript from a bash session (%1 refers to the ordinal number of background process as seen from jobs):

$ echo $$
3748

$ sleep 100 &
[1] 192

$ echo $!
192

$ kill %1

[1]+  Terminated              sleep 100



this is what I have done. Check it out, hope it can help.

#!/bin/bash
#
# So something to show.
echo "UNO" >  UNO.txt
echo "DOS" >  DOS.txt
#
# Initialize Pid List
dPidLst=""
#
# Generate background processes
tail -f UNO.txt&
dPidLst="$dPidLst $!"
tail -f DOS.txt&
dPidLst="$dPidLst $!"
#
# Report process IDs
echo PID=$$
echo dPidLst=$dPidLst
#
# Show process on current shell
ps -f
#
# Start killing background processes from list
for dPid in $dPidLst
do
        echo killing $dPid. Process is still there.
        ps | grep $dPid
        kill $dPid
        ps | grep $dPid
        echo Just ran "'"ps"'" command, $dPid must not show again.
done

Then just run it as: ./bgkill.sh with proper permissions of course

root@umsstd22 [P]:~# ./bgkill.sh
PID=23757
dPidLst= 23758 23759
UNO
DOS
UID        PID  PPID  C STIME TTY          TIME CMD
root      3937  3935  0 11:07 pts/5    00:00:00 -bash
root     23757  3937  0 11:55 pts/5    00:00:00 /bin/bash ./bgkill.sh
root     23758 23757  0 11:55 pts/5    00:00:00 tail -f UNO.txt
root     23759 23757  0 11:55 pts/5    00:00:00 tail -f DOS.txt
root     23760 23757  0 11:55 pts/5    00:00:00 ps -f
killing 23758. Process is still there.
23758 pts/5    00:00:00 tail
./bgkill.sh: line 24: 23758 Terminated              tail -f UNO.txt
Just ran 'ps' command, 23758 must not show again.
killing 23759. Process is still there.
23759 pts/5    00:00:00 tail
./bgkill.sh: line 24: 23759 Terminated              tail -f DOS.txt
Just ran 'ps' command, 23759 must not show again.
root@umsstd22 [P]:~# ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
root      3937  3935  0 11:07 pts/5    00:00:00 -bash
root     24200  3937  0 11:56 pts/5    00:00:00 ps -f



An even simpler way to kill all child process of a bash script:

pkill -P $$

The -P flag works the same way with pkill and pgrep - it gets child processes, only with pkillthe child processes get killed and with pgrep child PIDs are printed to stdout.




source - http://stackoverflow.com/questions/1908610/how-to-get-pid-of-background-process







Posted by linuxism
,


onabort이미지의 다운로드를 중지할 때 (브라우저의 중지버튼)
onactivate개체가 활성화될 때 발생
(태그의 기능이 작용할 때 발생하는 이벤트로 예를 들어 링크를 누를 경우 링크가 옮겨질때 발생하는 것을 감지하는 이벤트 핸들러)
onafterprint문서가 출력되거나 혹은 출력하기 위해 출력미리보기를 한 후에 발생
onafterupdate데이터영역 개체에서 발생하는 이벤트로 데이터 소스 오브젝트내의 데이터가 업데이트 되었을 때 발생(데이터 개체부분 참조)
onbeforeactivate개체가 활성화 상태로 되기 바로 직전에 발생 (onactivate 참고)
onbeforecopy선택 영역이 시스템의 클립보드로 복사되기 바로 직전에 발생
onbeforecut선택 영역이 지워지기 바로 직전에 발생
onbeforedeactivate부모 문서에서 현재 개체에서 다른 개체로 activeElement가 바뀔 때 발생
(activeElement는 개체를 지칭하는 예약어로도 쓰임)
onbeforeeditfocus편집가능한 개체 내부에 포함된 개체가 편집활성화된 상태가 되거나 혹은 편집가능한 개체가 제어를 위해 선택될 때
onbeforepaste시스템의 클립보드에서 문서로 붙여넣기 될 때 대상 개체에서 발생
onbeforeprint문서가 출력되거나 혹은 출력하기 위해 출력미리보기 직전에 발생
onbeforeunload페이지가 언로드되기 직전에 발생
onbeforeupdate데이터영역 개체에서 발생하는 이벤트로 데이터 소스 오브젝트내의 데이터가 업데이트 되기전에 발생 (데이터 개체부분 참조)
onblur개체가 포커스를 잃었을 때
onbounce마퀴태그에서 alernate상태에서 스크롤이 양 사이드에서 바운드될 때 발생
oncellchange데이터 제공 개체에서 데이터가 변화할 때 발생
onchange개체 혹은 선택영역의 내용이 바뀔 때 발생
onclick개체위에서 마우스의 왼쪽 버튼을 누를 때 발생
oncontextmenu클라이언트 영역에서 사용자가 마우스 오른쪽 버튼을 눌러 콘텍스트 메뉴를 열 때 발생
oncontrolselect사용자가 개체의 제어 영역을 만들 때 발생
oncopy시스템의 클립보드에 선택영역 혹은 개체를 복사할 때 소스 개체로부터 발생
oncut시스템의 클립보드에 선택영역 혹은 개체를 잘라낼때 소스 개체로부터 발생
ondataavailable비정기적으로 데이터를 전달하는 데이터 소스 개체로부터 데이터가 도착할 때마다 정기적으로 발생
ondatasetchanged데이터 소스개체의 변화에 의해 데이터가 노출된 상태로 될 때 발생
ondatasetcomplete데이터 소스 개체로부터 모든 데이터가 유용한 상태로 표시될 때 발생
ondblclick사용자가 개체에 더블클릭 할때 발생
ondeactivate모 문서에서 현재 개체에서 다른 개체로 activeElement가 변할 때 발생
ondrag드래그 상태가 지속되는 동안 소스 객체로부터 발생
ondragend드래그 상태가 끝날 때 소스 객체로부터 발생
ondragenter사용자가 개체를 드래그하여 드롭가능 위치로 지정된 영역으로 이동할 때 타갯 개체에서 발생
ondragleave사용자가 개체를 드래그하여 드롭가능 위치로 지정된 영역을 떠날 때 타갯 개체에서 발생
ondragover사용자가 개체를 드래그하여 드롭가능 위치로 지정된 영역내에서 드래그할 때 계속적으로 타갯 개체에서 발생
ondragstart선택된 개체 혹은 텍스트 영역에서 사용자가 드래그를 시작할 때 발생
ondrop드래그앤드롭 작용에서 상태가 진행되는 동안 개체가 타갯 개체에 드롭되었을 때 타갯 개체에서 발생
onerror개체가 로드되는 동안 발생하는 이벤트
onerrorupdate데이터 소스 개체 내에 데이터가 없데이트 되는 동안 에러가 발생할 때 데이터 영역 개체에서 발생
onfilterchange비주얼 필터의 상태가 바뀌거나 트랜지션이 완료되었을 때 발생
onfinish마퀴개체의 loop가 완료되었을 때 발생
onfocus개체가 포커스를 받았을 때 발생
onfocusin개체에 포커스가 셋팅되기 바로 직전 개체에 대해 발생
onfocusout포커스가 다른 개체로 이동한 후에 포커스를 가고 있는 현재 개체에서 발생
onhelp브라우저가 활성화 되어 있는 동안 F1키를 눌렀을 때
onkeydown사용자가 키를 눌렀을 때
onkeypress기능키를 제외한 키를 눌렀을 때 발생
onkeyup사용자가 키를 놓았을 때 발생
onlayoutcomplete소스 문서로 부터 콘텐드를 가지는 객체가 미리보기나 출력을 할때 현제 LayoutRect 개체를 모두 채우는 것이 끝났을 때 발생
onload브라우저가 개체를 로드한 후에 발생
onlosecapture개체가 마우스 캡쳐를 잃었을 때 발생
onmousedown개체 위에 마우스 버튼을 누를 때 발생(좌우 어느 버튼이든)
onmouseenter개체 안으로 마우스 포인터가 들어올 때 발생
onmouseleave개체의 경계밖으로 마우스 포인터가 이동할 때 발생
onmousemove개체위에서 마우스가 움직일 때 발생
onmouseout개체밖으로 마우스 포인터가 빠져나갈 때 발생
onmouseover개체위로 마우스 포인터가 들어올 때 발생
onmouseup마우스가 개체위에 있는 동안 마우스를 누른 상태에서 해제될 때 발생
onmousewheel마우스 휠이 돌아갈 때 발생
onmove개체가 움직일 때 발생
onmoveend개체가 움직임이 끝날 때 발생
onmovestart개체가 움직이기 시작할 때 발생
onpaste문서에 클립보드로부터 데이터가 전송될 때 타겟 개체에서 발생
onpropertychange개체의 속성이 바뀔 때 발생
onreadystatechange개체의 상태가 변화할 때 발생
onresetForm 을 사용자가 리셋할 경우 발생
onresize개체의 크기가 바뀔 때 발생
onresizeend제어영역에서 개체의 크기가 사용자에 의해 변화가 끝날 때 발생
onresizestart제어영역에서 개체의 크기가 사용자에 의해 변화되기 시작할 때 발생
onrowenter데이터 소스 내에서 현재 열이 변화되거나 개체에 새로운 유용한 데이터가 입력될 때 발생
onrowexit데이터 소스 콘트롤이 개체 내의 현재 열을 변화시킬 때 발생
onrowsdelete레코드셋에서 열이 삭제될 때 발생
onrowsinserted현재 레코드셋에 새로운 열이 추가된 후에 발생 (데이터 개체에서)
onscroll사용자가 개체 내의 스크롤 바를 스크롤할 때 발생
onselect현재 선택된 영역이 바뀔 때 발생
onselectionchange문서의 선택 영역의 상태가 바뀔 때 발생
onselectstart개체가 선택되기 시작할 때 발생
onstart마퀴개체에서 루프가 매번 시작될 때 발생
onstop사용자가 stop 버튼을 눌렀을 경우 혹은 페이지를 떠날 때 발생
onsubmit폼이 전송되기 직전에 발생
onunload개체가 언로드되기 직전에 발생

 
빠진 이벤트가 있다면 댓글로 달아주세요.
추가할께요.
 
그리고 더블어 이벤트를 사용하기 위해서는 이벤트 정의가 필요한데, 이는 브라우저별로 인식하는 방식이 다르기에 다음과 같은 스크립트를 응용합니다.
 

function addEvent(obj, eventType, functionName) {
   if (obj.addEventListener) {
      obj.addEventListener(eventType, functionName, false);
   }
   else if (obj.attachEvent) {
      obj.attachEvent("on" + eventType, functionName);
   }
   else {
      obj["on" + eventType] = functionName; // same as "obj.onType = functionName"
   }
}
function removeEvent(obj, eventType, functionName) {
   if (obj.removeEventListener) {
      obj.removeEventListener(eventType, functionName, false);
   }
   else if (obj.detachEvent) {
      obj.detachEvent("on" + eventType, functionName);
      obj[eventType + functionName] = null;
      obj["e" + eventType + functionName] = null;
   }
   else {
      obj[eventType + functionName] = null;
      obj["on" + eventType + functionName] = null;
      obj["e" + eventType + functionName] = null;
   }
}
// 이벤트 정의할때 ( 이벤트의 'on'접두사는 빼고 입력 )
addEvent(window,"load",eventFunction); // window.onload = function(){eventFunction();}; 와 동일
addEvent(document.getElementById("name"),"change",eventFunction);
// 이벤트 삭제할때
removeEvent(window,"load",pageSet);
removeEvent(document.getElementById("name"),"change",eventFunction);
// 이벤트 핸들러 함수
function eventFunction(e) {
   // 처리할 스크립트
}

 
이벤트 응용범위는 매우 방대하고 강력하기 때문에 CSS와 잘 섞어서 사용하면 플래시 부럽지 않은 효과를 연출할 수도 있습니다.
 
그리고 무한 반복 주의하세요.
가령 onresize 이벤트를 사용하여 창의 사이즈를 조절할때 창의 사이즈가 조절되면 다시 onresize 이벤트가 작동하게 됩니다. 그러면 또 사이즈를 조절하고 또 작동하는 식으로 무한루프에 빠지게 됩니다.
그러니 논리적인 알고리즘 설계가 중요해요. (저도 한번씩은 꼭 실수하고 넘어가는 부분...)
 
스크립트는 최소한 3종류 이상의 브라우저에서 테스트를 하세요. (다하면 좋겠지만...)
 
틀린 내용 있다면 지적해 주세요.



출처 - http://www.technote.co.kr/php/technote1/board.php?board=apple2&command=body&no=257



Posted by linuxism
,

css - z-index

Development/CSS 2014. 5. 15. 19:25


CSS Z-INDEX 이해하기

z-index 적용

처음 예제에서(z-index가 없는 경우의 쌓임) 엘리먼트들이 기본적으로 어떻게 쌓이는지 설명했다. 만약 다른 쌓임 순서를 적용하고 싶다면 먼저 엘리먼트에 position 속성을 지정하고 z-index 속성을 지정해야한다. 

z-index 속성은 하나의 정수 값을 가질 수 있다(양수, 음수 모두 가능하다). 이 값은 해당 엘리먼트의 z축 상의 위치를 나타낸다. 만약 당신이 z축에 익숙하지 않다면 여러 레이어가 쌓여있는 페이지를 상상해보라. 각 레이어는 번호가 붙어있고 높은 번호를 가진 레이어는 낮은 번호를 가진 레이어 위에 렌더링된다. 

다시한번 경고! z-index는 position 속성이 설정된 엘리먼트에 대해서만 의미를 갖는다.


출처 - https://developer.mozilla.org/ko/docs/CSS/Understanding_z-index/Adding_z-index

'Development > CSS' 카테고리의 다른 글

css - version update, cache flush  (0) 2014.08.27
css - sass  (0) 2014.06.27
css - position absolute center  (0) 2014.05.04
css - Background-color displaying incorrectly in IE8 and IE9  (0) 2014.04.29
css - placeholder color  (0) 2014.04.27
Posted by linuxism
,