![명령을 실행한 후 -v를 적용하는 방법은 무엇입니까?](https://linux55.com/image/97949/%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%9C%20%ED%9B%84%20-v%EB%A5%BC%20%EC%A0%81%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
6시간 정도 걸릴 것으로 알고 있는 명령의 진행 상황을 확인하고 싶습니다. 업데이트 스크립트를 실행하고 -v(또는 진행 상황을 "감시"하기 위해 수행해야 하는 모든 작업)를 사용하는 것을 잊어버렸기 때문에 프로세스가 얼마나 진행되었는지 알 방법이 없습니다.
해당되는 경우 내가 사용하는 명령은 다음과 같습니다.
drush cvupdb
CiviCRM 설치를 업그레이드하지만 이 질문은 실제로 CiviCRM에 적용되지 않습니다. 대답은 일반적으로 이미 실행 중인 프로세스에 적용될 수 있습니다. 매우 유사한 게시물에 이 질문을 댓글로 추가하고 싶지만 아직 평판이 충분하지 않아 새로운 주제를 시작해야 합니다. 감사해요!
답변1
프로그램의 소스 코드가 있으면 -v
이 옵션의 기능을 확인할 수 있습니다. 일반적으로 verbose라는 변수를 설정합니다. 예를 들면 다음과 같습니다.
int verbose=0
while ((opt = getopt(argc, argv, "v")) != -1) {
switch (opt) {
case 'v':
verbose= 1;
break;
이 경우 프로그램에 디버깅 정보(기호 테이블)가 포함되어 있으면 실행 중인 프로세스에 디버거를 연결하고 변수를 적절하게 설정할 수 있습니다.
gdb -p <pid>
n
n
...
set variable verbose=1
c
답변2
짧은 대답: 일반적으로 말하면 할 수 없습니다.
특정 질문에 대해 뭔가를 하고 있는지 확인하려면 top
해당 명령을 실행하면 top
가장 많은 CPU를 사용하는 프로세스가 맨 위에 표시됩니다. 작동한다면 drush
아마도 상단 근처에 있을 것입니다.
답변3
일반적으로 명령이나 스크립트가 가장 먼저 수행하는 작업은 인수를 읽는 것이므로 간단히 대답하자면 '아니요'입니다. 프로그램이 일부 설정 작업을 수행한 다음 매개변수를 읽는 경우에도 실행 중인 프로세스의 메모리를 해킹해야 합니다.
따라서 프로세스가 명령줄에서 실행되고 있는지 여부에 대한 질문에 답하기 위해 프로세스를 실행하는 데 사용하는 사용자 ID가 다음과 같다고 가정해 보겠습니다 c.hall
.
ps -fu c.hall
그러면 해당 사용자 ID로 실행 중인 모든 프로세스가 나열됩니다. 이제 프로세스가 데몬을 시작하면 더 까다롭지만 시작하기에 충분합니다.
답변4
에 표시된 바와 같이마크 스튜어트의 답변, 일반적으로 말하면 명령을 시작한 후에는 명령의 매개변수를 변경할 수 없습니다.
그러나 어떤 경우에는 프로세스 진행 상황이 외부에서 결정될 수 있습니다. 예를 들어, 프로세스에 신호를 dd
보내면 USR1
진행 상황이 인쇄되고 계속됩니다.
kill -USR1 $(pgrep dd)
파일을 읽거나 쓰는 프로세스의 경우 다음을 사용할 수 있습니다.progress
(Linux에만 해당) 얼마나 읽고 쓰는지 추적하고 남은 시간이 얼마나 되는지 알아보세요. 적어도 프로세스가 여전히 작업을 수행하고 있는지 확인할 수 있습니다.
progress -m -c dd
프로세스가 dd
모니터링됩니다.