Technical Note/LINUX

test 프로세스 모두 죽이기 제1안

  # kill -9 `ps -ef | grep test | awk '{print $2}'`


test 프로세스 모두 죽이기 제2안

  # ps -ef | grep test | grep -v grep | awk '{print "kill -9",$2}' | sh -v


test 프로세스 모두 죽이기 제3안

  # killall -KILL test


test 프로세스 모두 죽이기 쉘 스크립트 

  #!/bin/sh
  for PID `ps -ef | grep test | grep -v grep | awk '{print $2}'`
  do
  kill -9 $PID
  done


test User로 실행 되어지는 모든 프로세스 죽이기

  # kill -9 `ps -ef | awk '$1=="test" {print $2}'`

저작자 표시 비영리 변경 금지


Technical Note/Node.js

ZIP a Folder in NodeJS

Here is a simple way to archive and pipe a folder in NodeJS.
First, get the fstream and tar modules:
  • npm install fstream
  • npm install tar
Do something like this on your server:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var fstream = require('fstream'),
    tar = require('tar'),
    zlib = require('zlib');
 
    res.writeHead(200, {
      'Content-Type'        'application/octet-stream',
      'Content-Disposition' 'attachment; filename=myArchive.zip',
      'Content-Encoding'    'gzip'
    });
 
    var folderWeWantToZip = '/foo/bar';
 
    /* Read the source directory */
    fstream.Reader({ 'path' : folderWeWantToZip, 'type' 'Directory' })
        .pipe(tar.Pack())/* Convert the directory to a .tar file */
        .pipe(zlib.Gzip())/* Compress the .tar file */
        .pipe(response); // Write back to the response, or wherever else...
This solution is based on an answer on StackOverflow


일상이야기

전세난이 몇 년 간 지속이 되면서 전세금이 매매가격의 50-60%를 넘어 70-80%를 넘는 단지들이 많아지면서 전세금 반환 관련 분쟁이 많이 생기고 있다.

일반적으로는 전세계약이 만료가 되어 계약연장을 하지 않으면 만기일에 맞춰서 전세보증금을 반환 받아야 하는 것이 맞지만 대부분 집주인들이 전세보증금을 현금자산으로 보관하는 경우가 많지 않아서 다른 세입자를 제 때 구하지 못하게 되면 전세만기일에 전세보증금을 반환하지 못하는 경우가 빈번히 발생하기 때문에 반드시 전세기간이 만료되더라도 무조건 전세금을 받을 수 있으리라 생각하고 일방적으로 이사 갈 집 계약을 하면 낭패를 볼 수 있다.

이사 갈 집을 먼저 계약했다가 계약해지가 될 경우 그 책임을 무조건 집주인에게 물을 수는 없기에 반드시 현 전세 집이 새로운 세입자와 계약이 되는 것을 보고 보증금 반환가능 날짜에 맞춰서 내가 이사 갈 집 계약을 하는 것이 좋다.

전세보증금을 받지 못하는 경우에는 내용증명을 보내고 전세금 반환소송까지도 고려를 해야 하는데 소송을 하더라도 수개월 정도 기간이 소요가 되고 보증금 반환청구소송과 더불어 손해배상청구까지도 동시에 진행을 해야 할 수도 있어서 소송은 마지막 카드로 생각하고 가급적 상호 협의하여 원만하게 마무리 하는 것이 가장 좋다.

전세보증금을 반환 받지 못한 상황에서 퇴거를 해야 하는 상황이 생기면 우선 전세권설정등기를 생각할 수 있는데 전세권설정등기는 보증금 반환을 지체하면 법원의 판결문이 없어도 경매신청을 청구할 수가 있고, 경매절차에서도 확정일자는 배당요구를 꼭 해야 하지만 전세권설정은 별도의 배당요구 없이도 순위 배당에 참가할 수 있으며 실제 거주여부와 관계없이 대항력을 가지기 때문에 주민등록 주소를 옮기더라도 대항력이 있어서 세대전원이 주소를 빼고 짐도 모두 빼는 상황이 되어도 대항력에는 문제가 없는 장점은 있지만 임대인의 동의가 필요하고 등기비용도 발생하기 때문에 번거로운 것도 사실이다.

그래서 대부분 전세권설정등기 보다는 확정일자를 받는 경우가 대부분인데 전세계약을 한 후 전입신고를 하고 확정일자를 받은 후 점유(실거주)를 하게되면 대항력을 갖추게 되고 보증금반환소송에 의하여 판결문을 받아 강제경매를 할 수 있다.

확정일자만 받은 상황에서 전세보증금을 받지 못하고 먼저 퇴거를 해야 하는 경우에는

점유와 전입신고의 요건을 유지해야 하기에 전세금을 받기 전까지는 세대원 일부의 주소는 그대로 남겨두고 짐도 일부 남겨두는 것이 좋다.

임차권 등기명령도 있는데 부동산소재지 지방법원에 임차권등기명령 신청을 하고 주민등록등본, 거주사실 확인서를 첨부하여 확정일자를 받은 임대차계약서와 같이 제출을 하여 임차권등기명령 신청이 완료되면 전세금 받기 전 이사를 해서 주민등록을 옮기더라도 대항력을 갖추게 된다.

다만, 임차권등기명령은 임대차계약기간이 만료된 시점에만 가능하기에 계약만료 이전에 먼저 이사를 갈 경우에는 해당이 안되기에 주의가 필요하다.

이렇게 전세보증금을 받지 못하고 이사를 가야 하는 경우에는 전세계약기간이 만료되면 임차권등기명령을 하는 것도 좋고, 계약기간 중이라면 가족 일부의 주소와 점유는 유지 하는 것이 좋으며, 전세대원이 모두 퇴거를 해야 한다면 전세권 설정을 하는 것도 좋다.

주의해야 할 점은 전입신고를 할 때 본인이 주소를 잘못 기재한 경우, 건물의 실제 동표시가 공부와 다른 경우, 일시적으로 주민등록을 이전한 경우, 주민등록상 동, 호수 표시가 기재되지 않은 경우, 전입신고 전에 저당권, 가압류, 가등기, 처분금지가처분이 된 주택의 경우에는 대항력이 없어 보호를 받지 못할 수 있다.

마지막으로 전세금반환을 보증하는 대한주택보증이나 서울보증보험의 전세금 반환보증보험도 있어서 불안하신 분들은 가입조건을 확인해보는 것도 좋겠다.

그리고 무엇보다 문제가 생기기 전 예방이 가장 좋은 방법이기에 전세 집을 구할 때는 가급적 전세금과 근저당채권최고액의 합이 집값의 70%를 넘지 않는 것이 좋고 70%를 넘는 경우 꼭 그 집이 마음에 든다면 보증금을 안전수준까지 낮추고 반전세로 일부는 월세로 전환하는 것도 안정성을 높이는 방법이며, 집주인의 직업이 안정적인 확인해보는 것도 도움이 된다.

 
김인만 부동산연구소http://cafe.naver.com/atou1

Technical Note/Node.js

How to download files using Node.js


There are three approaches to writing a file downloader app using Node - i. HTTP.get, ii. curl, iii. wget. I have created functions for all of them. To get the examples working makes sure you have the dependencies and app variables intact. Read the comments thoroughly, you will not only learn how to download files, but will also learn more about Node's child_process, File System, Buffers, and Streams. Let's start with HTTP.get.

Downloading using HTTP.get

HTTP.get is Node's built-in mechanism for making HTTP GET requests, which can also be used for downloading files using the HTTP protocol. The advantage of using HTTP.get is that you don't rely on any external programs to download files.

// Dependencies
var fs = require('fs');
var url = require('url');
var http = require('http');
var exec = require('child_process').exec;
var spawn = require('child_process').spawn;

// App variables
var file_url = 'http://upload.wikimedia.org/wikipedia/commons/4/4f/Big%26Small_edit_1.jpg';
var DOWNLOAD_DIR = './downloads/';

// We will be downloading the files to a directory, so make sure it's there
// This step is not required if you have manually created the directory
var mkdir = 'mkdir -p ' + DOWNLOAD_DIR;
var child = exec(mkdir, function(err, stdout, stderr) {
if (err) throw err;
else download_file_httpget(file_url);
});

// Function to download file using HTTP.get
var download_file_httpget = function(file_url) {
var options = {
host: url.parse(file_url).host,
port: 80,
path: url.parse(file_url).pathname
};

var file_name = url.parse(file_url).pathname.split('/').pop();
var file = fs.createWriteStream(DOWNLOAD_DIR + file_name);

http.get(options, function(res) {
res.on('data', function(data) {
file.write(data);
}).on('end', function() {
file.end();
console.log(file_name + ' downloaded to ' + DOWNLOAD_DIR);
});
});
};

The above function is probably the best way to download files using HTTP.get in Node. Make a HTTP.get request and create a writable stream using fs.createWriteStream. Since the HTTP.get's response is a stream, it has the data event, which carries the chunks of data sent by the server. One each data event, write the data to the writeable stream. Once the server finishes sending data, close the instance of fs.createWriteStream. If you are trying to use fs.write orfs.writeFile or any of their variants, they will fail for medium to large files. Usefs.createWriteStream instead for reliable results.

Downloading using curl

To download files using curl in Node.js we will need to use Node's child_process module. We will be calling curl using child_process's spawn method. We are using spawn instead of execfor the sake of convenience - spawn returns a stream with data event and doesn't have buffer size issue unlike exec. That doesn't mean exec is inferior to spawn; in fact we will use exec to download files using wget.

// Function to download file using curl
var download_file_curl = function(file_url) {

// extract the file name
var file_name = url.parse(file_url).pathname.split('/').pop();
// create an instance of writable stream
var file = fs.createWriteStream(DOWNLOAD_DIR + file_name);
// execute curl using child_process' spawn function
var curl = spawn('curl', [file_url]);
// add a 'data' event listener for the spawn instance
curl.stdout.on('data', function(data) { file.write(data); });
// add an 'end' event listener to close the writeable stream
curl.stdout.on('end', function(data) {
file.end();
console.log(file_name + ' downloaded to ' + DOWNLOAD_DIR);
});
// when the spawn child process exits, check if there were any errors and close the writeable stream
curl.on('exit', function(code) {
if (code != 0) {
console.log('Failed: ' + code);
}
});
};

The way data was written to the instance of fs.createWriteStream is similar to way we did for HTTP.get. The only difference is that the data and end events are listened on the stdout object ofspawn. Also we listen to spawn's exit event to make note of any errors.

Downloading using wget

Although it says downloading using wget, this example applies to downloading using curl with the -O option too. This method of downloading looks the most simple from coding point of view.

// Function to download file using wget
var download_file_wget = function(file_url) {

// extract the file name
var file_name = url.parse(file_url).pathname.split('/').pop();
// compose the wget command
var wget = 'wget -P ' + DOWNLOAD_DIR + ' ' + file_url;
// excute wget using child_process' exec function

var child = exec(wget, function(err, stdout, stderr) {
if (err) throw err;
else console.log(file_name + ' downloaded to ' + DOWNLOAD_DIR);
});
};

In the above method, we used child_process's exec function to run wget. Why exec and notspawn? Because we just want wget to tell us if the work was done properly or not, we are not interested in buffers and streams. We are making wget do all the dirty work of making request, handling data, and saving the file for us. As you might have guessed, this method is the fastest among the three methods I described.

So now the question is - which method is the best? The answer - whatever suits your need. The wgetmethod is probably the best is you want to save the files to the local disk, but certainly not if you want to send those files as a response to a current client request; for something like that you would need to use a stream. All the three methods have multiple options, you choice will ultimately depend on what your needs are. Happy downloading!

Further Reading

  1. Node.js HTTP
  2. Node.js fs
  3. Node.js Child Processes
  4. Node.js Buffers
  5. Node.js Streams


Technical Note/Node.js
http://www.hacksparrow.com/difference-between-spawn-and-exec-of-node-js-child_process.html

`spawn` `exec`가 하는 작업은 동일하지만, 

`spawn`은 스트림(stream)을 리턴하고, `exec`는 버퍼(buffer)를 리턴한다.

`spawn`은 `stdout`과 `stderr` 스트림을 포함한 객체를 리턴한다.
자식 프로세스의 표준 출력을 `stdout` 객체로 받아 처리할 수 있다.
`stdout` 객체는 `data`와 `end` 등의 이벤트를 발생한다.
`spawn`은 자식 프로세스로부터 많은 양의 데이터를 받는 경우에 유용한다.
예) 이미지 프로세싱이나 바이너리 데이터를 읽어오는 등


`exec`는 자식 프로세스 버퍼의 아웃풋을 리턴한다.
버퍼의 사이즈는 기본값은 200k이다.
만약, 자식 프로세스가 버퍼 사이즈보다 더 큰 값을 리턴하면,
"Error: maxBuffer exceeded" 오류가 나면서 프로그램이 종료될 것이다.
버퍼 사이즈를 크게 늘리면 해결할 수는 있으나,
`exec`는 큰 사이즈의 버퍼 처리를 위한 것이 아니다.
이런 경우라면 `spawn`을 사용하는 게 적합하다.
`exec`는 데이터 대신 상태 정도의 작은 결과를 출력하는 프로그램을 실행하는 용도로 사용한다.

또 하나,
`spawn`은 비동기로 실행하고, 결과도 비동기로 받는다.
`exec`는 동기로 실행하고, 결과는 비동기로 받는다.

정리: 자식 프로세스로부터 큰 바이너리 데이터를 리턴받는 경우라면 `spawn`을,
간단한 상태 메시지만 받는 것이라면 `exec`를 쓴다.


상황에 따라 `spawn`  `exec`를 사용한 예


1 2 3 4 ··· 48
블로그 이미지

zzikjh