Re: How to `echo' the core # a bash script is running on?
On 11 Feb 2014, at 04:09, Joel Rees <joel.rees@gmail.com> wrote:
> On Tue, Feb 11, 2014 at 9:03 AM, Chris Davies <chris@roaima.co.uk> wrote:
>> Marco Ippolito <maroloccio@gmail.com> wrote:
>>> How can I `echo', in `bash', the core # the current script is running on?
>>
>> This will probably do it for you
>> awk '{print $39}' /proc/$$/stat
>>
>> See proc(5) for details, including the 39. Please also note that unless
>> you've set the task affinity (see taskset(1) for details) the process
>> can - and will - be reassigned different cores during its lifetime.
>
> Heh. What odds do you give it that the processor will be running on a
> different core by the time his script has IDed the core? Or maybe even
> cycled back again?
>
> But, I guess if the OP's purpose is just to prove that scripts are not
> confined to a single core, I guess it doesn't matter. (I can't say
> that I can think of any other reason for the question, now that I
> think of it. Hmm)
>
> --
> Joel Rees
>
> Be careful where you see conspiracy.
> Look first in your own heart.
Appreciated the discussion, thanks. Yes, I was trying to verify some behaviour, a bit like the following Bash one-liner, but in another context, and `taskset' helped me more than looking at `printf' as an aftermath:
bash4$ f=/tmp/delme; printf '%s\n' '#include <stdio.h>' '#include <sched.h>' 'int main(int argc, const char* argv[]) { printf("job: %s; sched_getcpu(): %d\n", argv[1], sched_getcpu()); return 0; }' | gcc -x c -o "$f" - && parallel -j 0 "$f" {#} -- {1..9}
job: 1; sched_getcpu(): 0
job: 2; sched_getcpu(): 1
job: 3; sched_getcpu(): 1
job: 4; sched_getcpu(): 1
job: 5; sched_getcpu(): 1
job: 6; sched_getcpu(): 1
job: 7; sched_getcpu(): 1
job: 8; sched_getcpu(): 0
job: 9; sched_getcpu(): 1
Printing job IDs, "cpu" numbers, etc.
In the end I just rewrote my "script" in C.
Reply to: