
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
.