aboutsummaryrefslogtreecommitdiffhomepage
path: root/builtin.c
diff options
context:
space:
mode:
authorGravatar axel <axel@liljencrantz.se>2006-05-26 21:38:11 +1000
committerGravatar axel <axel@liljencrantz.se>2006-05-26 21:38:11 +1000
commitd6bf8796758a51c1e8f80fd3cc954a3923f87d01 (patch)
tree462773d4c9b31a365510a781c6800d9c3ec2c102 /builtin.c
parent051f557e8fa2fc7a39e4ae711ca39f2bdf1fc37b (diff)
Move jobs builtin to its own file
darcs-hash:20060526113811-ac50b-9c0ed1aa26cd2f247978e406bea86e8c36d73710.gz
Diffstat (limited to 'builtin.c')
-rw-r--r--builtin.c322
1 files changed, 0 insertions, 322 deletions
diff --git a/builtin.c b/builtin.c
index 4c49b734..f092a8a3 100644
--- a/builtin.c
+++ b/builtin.c
@@ -93,18 +93,6 @@ typedef struct builtin_data
/**
- Print modes for the jobs builtin
-*/
-enum
-{
- JOBS_DEFAULT, /**< Print lots of general info */
- JOBS_PRINT_PID, /**< Print pid of each process in job */
- JOBS_PRINT_COMMAND, /**< Print command name of each process in job */
- JOBS_PRINT_GROUP, /**< Print group id of job */
-}
- ;
-
-/**
Table of all builtins
*/
static hash_table_t builtin;
@@ -2341,316 +2329,6 @@ static int builtin_bg( wchar_t **argv )
}
-#ifdef HAVE__PROC_SELF_STAT
-/**
- Calculates the cpu usage (in percent) of the specified job.
-*/
-static int cpu_use( job_t *j )
-{
- double u=0;
- process_t *p;
-
- for( p=j->first_process; p; p=p->next )
- {
- struct timeval t;
- int jiffies;
- gettimeofday( &t, 0 );
- jiffies = proc_get_jiffies( p );
-
- double t1 = 1000000.0*p->last_time.tv_sec+p->last_time.tv_usec;
- double t2 = 1000000.0*t.tv_sec+t.tv_usec;
-
-/* fwprintf( stderr, L"t1 %f t2 %f p1 %d p2 %d\n",
- t1, t2, jiffies, p->last_jiffies );
-*/
-
- u += ((double)(jiffies-p->last_jiffies))/(t2-t1);
- }
- return u*1000000;
-}
-#endif
-
-/**
- Print information about the specified job
-*/
-static void builtin_jobs_print( job_t *j, int mode, int header )
-{
- process_t *p;
- switch( mode )
- {
- case JOBS_DEFAULT:
- {
-
- if( header )
- {
- /*
- Print table header before first job
- */
- sb_append( sb_out, _( L"Job\tGroup\t" ));
-#ifdef HAVE__PROC_SELF_STAT
- sb_append( sb_out, _( L"CPU\t" ) );
-#endif
- sb_append( sb_out, _( L"State\tCommand\n" ) );
- }
-
- sb_printf( sb_out, L"%d\t%d\t", j->job_id, j->pgid );
-
-#ifdef HAVE__PROC_SELF_STAT
- sb_printf( sb_out, L"%d%%\t", cpu_use(j) );
-#endif
- sb_append2( sb_out,
- job_is_stopped(j)?_(L"stopped"):_(L"running"),
- L"\t",
- j->command,
- L"\n",
- (void *)0 );
- break;
- }
-
- case JOBS_PRINT_GROUP:
- {
- if( header )
- {
- /*
- Print table header before first job
- */
- sb_append( sb_out, _( L"Group\n" ));
- }
- sb_printf( sb_out, L"%d\n", j->pgid );
- break;
- }
-
- case JOBS_PRINT_PID:
- {
- if( header )
- {
- /*
- Print table header before first job
- */
- sb_append( sb_out, _( L"Procces\n" ));
- }
-
- for( p=j->first_process; p; p=p->next )
- {
- sb_printf( sb_out, L"%d\n", p->pid );
- }
- break;
- }
-
- case JOBS_PRINT_COMMAND:
- {
- if( header )
- {
- /*
- Print table header before first job
- */
- sb_append( sb_out, _( L"Command\n" ));
- }
-
- for( p=j->first_process; p; p=p->next )
- {
- sb_printf( sb_out, L"%ls\n", p->argv[0] );
- }
- break;
- }
- }
-
-}
-
-
-
-/**
- Builtin for printing running jobs
-*/
-static int builtin_jobs( wchar_t **argv )
-{
- int argc=0;
- int found=0;
- int mode=JOBS_DEFAULT;
- int print_last = 0;
- job_t *j;
-
- argc = builtin_count_args( argv );
- woptind=0;
-
- while( 1 )
- {
- const static struct woption
- long_options[] =
- {
- {
- L"pid", no_argument, 0, 'p'
- }
- ,
- {
- L"command", no_argument, 0, 'c'
- }
- ,
- {
- L"group", no_argument, 0, 'g'
- }
- ,
- {
- L"last", no_argument, 0, 'l'
- }
- ,
- {
- L"help", no_argument, 0, 'h'
- }
- ,
- {
- 0, 0, 0, 0
- }
- }
- ;
-
- int opt_index = 0;
-
- int opt = wgetopt_long( argc,
- argv,
- L"pclgh",
- long_options,
- &opt_index );
- if( opt == -1 )
- break;
-
- switch( opt )
- {
- case 0:
- if(long_options[opt_index].flag != 0)
- break;
- sb_printf( sb_err,
- BUILTIN_ERR_UNKNOWN,
- argv[0],
- long_options[opt_index].name );
-
- sb_append( sb_err,
- parser_current_line() );
- builtin_print_help( argv[0], sb_err );
-
-
- return 1;
-
-
- case 'p':
- mode=JOBS_PRINT_PID;
- break;
-
- case 'c':
- mode=JOBS_PRINT_COMMAND;
- break;
-
- case 'g':
- mode=JOBS_PRINT_GROUP;
- break;
-
- case 'l':
- {
- print_last = 1;
- break;
- }
-
- case 'h':
- builtin_print_help( argv[0], sb_out );
- return 0;
-
- case '?':
- builtin_print_help( argv[0], sb_err );
-
- return 1;
-
- }
- }
-
-
- /*
- Do not babble if not interactive
- */
- if( builtin_out_redirect )
- {
- found=1;
- }
-
- if( print_last )
- {
- /*
- Ignore unconstructed jobs, i.e. ourself.
- */
- for( j=first_job; j; j=j->next )
- {
- if( j->constructed && !job_is_completed(j) )
- {
- builtin_jobs_print( j, mode, !found );
- return 0;
- }
- }
-
- }
- else
- {
- if( woptind < argc )
- {
- int i;
-
- found = 1;
-
- for( i=woptind; i<argc; i++ )
- {
- long pid;
- wchar_t *end;
- errno=0;
- pid=wcstol( argv[i], &end, 10 );
- if( errno || *end )
- {
- sb_printf( sb_err,
- _( L"%ls: '%ls' is not a job\n" ),
- argv[0],
- argv[i] );
- return 1;
- }
-
- j = job_get_from_pid( pid );
-
- if( j && !job_is_completed( j ) )
- {
- builtin_jobs_print( j, mode, !found );
- }
- else
- {
- sb_printf( sb_err,
- _( L"%ls: No suitable job: %d\n" ),
- argv[0],
- pid );
- return 1;
- }
- }
- }
- else
- {
- for( j= first_job; j; j=j->next )
- {
- /*
- Ignore unconstructed jobs, i.e. ourself.
- */
- if( j->constructed && !job_is_completed(j) )
- {
- builtin_jobs_print( j, mode, !found );
- found = 1;
- }
- }
- }
- }
-
- if( !found )
- {
- sb_printf( sb_out,
- _( L"%ls: There are no jobs\n" ),
- argv[0] );
- }
-
- return 0;
-}
-
/**
Builtin for looping over a list
*/